C++ で VM 実装中 その3 - Scheme VM を書く
ここ2日で実装したのは以下。
- REFER_FREE
- UNDEF
- REFER_FREE
- ARGUMENT
- APPEND
- CADR
- FRAME
- REFER_LOCAL
- APPLY(途中)
- TEST
- SHIFT
- REFER_FREE のバグを修正
- APPLY 時に frame pointer の更新が間違っているバグを修正
- FRAME 時に pc が1つずれるバグを修正
- RETURN
- スタックの中身を dump する仕組みを作った
- ASSIGN_GLOBAL
- EQUAL (equal?相当)
- LOCAL_JMP
- コンパイラのバグを修正 (set! a (and)) の (and) が #t じゃなくて手続き呼び出しになってしまっていた。
自作の文字列ライブラリ内で落ちるバグがあってデバッグ中。
GC を OFF にすると落ちないという。デバッグ力が試されますね。
追記
原因が分かった。
objects_ = new(GC) Object[num]; // ↑のように書くべき所を objects_ = new Object[num];
と書いていて回収されてしまったっぽい。