Binder Functions
2つの重要なバインダー関数はbindSourceFile
とmergeSymbolTable
です。これらを次に見ていきます。
bindSourceFile
bindSourceFile
基本的にfile.locals
が定義されているかどうかを確認し、そうでなければ(ローカル関数)bind
に渡します。
注: locals
はNode
で定義され、SymbolTable
型です。SourceFile
もまたNode
(実際にはASTのルートNode)であることに注意してください。
TIP: ローカル関数は、TypeScriptコンパイラで頻繁に使用されます。ローカル関数は親関数(クロージャによって捕捉される)からの変数を使用することが非常に多いです。bind
(bindSourceFile
内のローカル関数)の場合、それ(またはそれが呼び出す関数)はsymbolCount
とclassifiableNames
をセットアップし、返された SourceFile
に格納されます。
bind
bind
Bindは(ただのSourceFile
ではなく)何らかのNode
を取ります。最初に行うことは、node.parent
(もしparent
変数がセットアップされていれば ... それは、BinderがbindChildren
関数内の処理中に行うことです)を代入し、重い作業を行うbindWorker
に渡します。最後に、これはbindChildren
を呼び出します(単にバインダーの状態を格納する関数です。例えば現在のparent
をその関数のローカル変数に格納し、子それぞれにbind
を呼び出して、それからbinderの状態を復元します)。もっと興味深い関数であるbindWorker
を見てみましょう。
bindWorker
bindWorker
この関数はnode.kind
(SyntaxKind
型)によってスイッチし、適切なbindFoo
関数(binder.ts
で定義されています)に処理をデリゲートします。例えばnode
がSourceFile
であればbindAnonymousDeclaration
を呼び出します(最終的に外部ファイルモジュールである場合のみ)。
bindFoo
関数
bindFoo
関数bindFoo
関数に共通するパターンと、これらが使用するいくつかのユーティリティ関数があります。ほぼ常に使用される関数の1つは、createSymbol
関数です。以下にその全体を示します。
ご覧のとおり、symbolCount
(bindSourceFile
のローカル)を最新の状態にし、指定されたパラメータでSymbolを作成しています。
最終更新