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()マクロでアクセス可能)に格納されています。