ひとり勉強会

ひとり楽しく勉強会

ruby_run @ eval.c

最後に、main から ruby_run が呼ばれます。その中では何段にも関数が呼ばれますが、メインの流れは一列です。

  • main
    • ruby_run
      • ruby_exec
        • ruby_exec_internal
          • yarvcore_eval_parsed @ yarvcore.c

yarvcoreにたどり着きました!

VALUE
yarvcore_eval_parsed(NODE *node, VALUE file)
{
    VALUE iseq = th_compile_from_node(GET_THREAD(), node,
                                      file);
    return yarvcore_eval_iseq(iseq);
}

引数nodeには、ruby_optionsかどこかでいつの間にかparseされていた構文木が渡ってきます。引数fileには、スクリプトのファイル名が入っています。

関数の中身は読みやすいですね。構文木をiseq(Instruction Sequenceかな?)にコンパイルして、それを、yarvcore_eval_iseqで実行しています。いよいよここから実行!