ひとり勉強会

ひとり楽しく勉強会

Init_yarv @ yarvcore.c

一個目の初期化ルーチン Init_yarv はこんなんでした。

void
Init_yarv(void)
{
    /* initialize main thread */
    yarv_vm_t *vm = ALLOC(yarv_vm_t);
    yarv_thread_t *th = ALLOC(yarv_thread_t);

    vm_init2(vm);
    theYarvVM = vm;

    th_init2(th);
    th->vm = vm;
    yarv_set_current_running_thread_raw(th);
}

YARV仮想マシンを表す構造体(yarv_vm_t型)と、スレッドを表す構造体(yarv_thread_t型)を1個ずつ作って初期化しています。vm_init2 はメモリをゼロクリアしているだけでした。th_init2 は、なにやらフレームのスタックを作成したりしてましたが、まだYARVの実行処理部分を見ていないので、どういう意味があるのかちゃんとつかめませんでした。のちのちスレッドの構造を見る段階で詳しくチェックします。

とりあえず、「仮想マシンを表す構造」と「スレッドを表す構造」が1個ずつ最初に作られることだけ覚えておきます。仮想マシンはtheYarvVM変数(GET_VM()マクロでアクセス可能)に、スレッドはyarv_set_current_running_thread_rawのなかでyarvCurrentThread変数(GET_THREAD()マクロでアクセス可能)に格納されています。