Open4

swc コードリーディングメモ

nus3nus3

@swc/coreパッケージ

https://www.npmjs.com/package/@swc/core

  • @swc/coreはnpmパッケージとして公開されているので、Node.jsでswcのメソッドが実行できる
  • tsやjsのコンパイル・トランスパイルはNode.jsのアドオンとしてRustのコードをコンパイルしたバイナリで実行されている?
  • @swc/coreパッケージとしてのtypescript側の実装はnode-swcディレクトリ配下にある

@swc/coreの流れ

  1. yarn buildを実行するとnode-swcディレクトリのtypescriptがビルドされる。
  2. napi build(@napi-rs/cli)が実行され、cargo-name(Cargo.tomlのpacakgeに定義されているname)がnode(node/binding/src)のRustコードがNode.jsのアドオンとして使えるバイナリにコンパイルされる?
  3. node-swcでは@node-rs/helperloadBindingでコンパイルされたrustのバイナリをbindingしてる
  4. 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から読み始めれば良き?

nus3nus3

TODO: ecmascript/parser/src/parser/mod.rsのparse_stmt_likeの実装を読む続きから