バグの現象の詳細が把握できた

バグの現象の詳細が把握できた。display closure レジスタが正しくないものになる場合があるようだ。そのせいで REFER_FREE した結果も全く別のものになってコンパイル結果に影響を及ぼしていた。
本来であれば全く異なるオブジェクト・値が REFER_FREE で返ってくるので容易に気付くこともできた。しかしながら今回のケースでは全く同じ引数を持つ違う手続きを連鎖的に呼び出していたので気付けなかった。具体的にはどの手続きも第一引数が CodeBuilder オブジェクトだった。


現象の詳細は把握できたが、なぜおかしくなるかはまだ分からないので以下のように進めようと思う。

  • 現象の再現パターンの最小セットを作る(ここが難関)
  • vm.scm でデバッグ
  • VM.cpp へ反映。