Open4
swc コードリーディングメモ
swcの中のコードを読むことでjsやtsをどのようにコンパイルしているのか理解するメモ
末尾に?
がついてるものは確証が持てない不安な気持ちを表してます
@swc/core
パッケージ
-
@swc/core
はnpmパッケージとして公開されているので、Node.jsでswcのメソッドが実行できる - tsやjsのコンパイル・トランスパイルはNode.jsのアドオンとしてRustのコードをコンパイルしたバイナリで実行されている?
-
@swc/core
パッケージとしてのtypescript側の実装はnode-swc
ディレクトリ配下にある
@swc/coreの流れ
-
yarn build
を実行するとnode-swc
ディレクトリのtypescriptがビルドされる。 -
napi build
(@napi-rs/cli)が実行され、cargo-name(Cargo.tomlのpacakgeに定義されているname)がnode
(node/binding/src
)のRustコードがNode.jsのアドオンとして使えるバイナリにコンパイルされる? -
node-swc
では@node-rs/helper
のloadBinding
でコンパイルされたrustのバイナリをbindingしてる -
bindings.parse(src, toBuffer(options), filename);
のようにbindingされたrustのコードを実行する
node/binding/src/lib.rs
実際にtypescript側からコンパイルされたバイナリをbindingするときのメソッド名とRustの実装を紐づけてる?
このファイルでのRust側の実装は大体がsrc/lib.rs
のComplier structのメソッドを実行しており、parseやprintの実装はsrc/lib.rs
から読み始めれば良き?
TODO: ecmascript/parser/src/parser/mod.rsのparse_stmt_like
の実装を読む続きから