看過 parse.c 一路,只考慮執行一段最簡單的 Ruby code,跳過各種細節,知道 ruby_options
會產生 iseq
,然後 ruby_run_node
會執行
static int
rb_main(int argc, char **argv)
{
RUBY_INIT_STACK;
ruby_init();
return ruby_run_node(ruby_options(argc, argv));
}
Ruby 有數種 scope,需要依規則 lookup "symbol"。這些資訊應該在 parse 的結果中有記下來,需要找到是存在哪裡。另外在執行過程中有操作的規則,可以找到正確的內容。
與學習 Ruby 不同,這些結構不太出現在 Ruby 的說明文件中,要繼續看 YARV 程式碼,尋找對應的 C struct 與操作