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];	

と書いていて回収されてしまったっぽい。