ruby_run @ eval.c
最後に、main から ruby_run が呼ばれます。その中では何段にも関数が呼ばれますが、メインの流れは一列です。
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で実行しています。いよいよここから実行!