v8

7.Parse - v8 ソースコードリーディング

ParserApi::PartialPreParse から PreParse の結果のデータ構造を見ていく。 DoPreParse の結果は ParserRecorder に記録されるようだ。Parse の結果に影響を与える各種フラグを見た後に Parser の本体へ。 FunctionLiteral* Parser::DoParseProgram(Handle<String> </string>…

6.スクリプトの実行 - v8 ソースコードリーディング

% gdb ./d8_g して r -e "print('hello')" をステップ実行していき様子を見る ExecuteString Script::Compile Script::New Compiler::Compile コンパイルキャッシュのルックアップ(統計情報を更新していたり) ソースコードがある程度の長さあるなら PrePar…

5.実行試行錯誤 - v8 ソースコードリーディング

何度かビルドし直して scons d8 mode=debug library=static が良さそうと気づく。gdb で d8 を -e "print('hello');" して main で break。さて実行継続するとスレッドが作られてすぐに終わってしまう。(続く)

4.ビルド - v8 ソースコードリーディング

Integer::New で grep してみたがほとんど使われていないようだ。内部的にソースコード行番号を表すのに使っている箇所は見つかったけど。あとで見つかるかもしれないので気にせず次に行こう。実際に動かしてみてコードのパスを見たいのでビルドしてみよう。…

3.文字列・数値 - v8 ソースコードリーディング

文字列 文字列を見ていこう。 v8.h の class String 。 V8EXPORT int Length() const; V8EXPORT int Utf8Length() const; があるのが時代を感じる。文字列の Write も Ascii, UTF16, UTF8 用がある。面白いのは V8EXPORT static v8::Local Empty(); 長さがゼ…

2.Trueオブジェクト Oddball など - v8 ソースコードリーディング

include/v8.h プリミティブ型の定義があるので見てみよう。 Handle GC で追跡できるようにオブジェクトをハンドルで管理する。 GC がオブジェクトを移動する可能性があるので参照ではなくてハンドル。 Handle は値渡しで使われ heap に確保されない Handle …

1.ディレクトリ構成 - v8 ソースコードリーディング

ディレクトリ構成 . : SConstruct など |-- benchmarks : JavaScript のベンチマーク |-- build : プロジェクトファイルを generate するための gyp ファイル |-- include : v8.h などプリミティブ型の class がある。あとで見直す |-- preparser : preparse…