named let, letrec 最適化バグの修正

例の let 境界を越えてしまうバグを修正。とても気力を使う仕事だった。毎晩ベッドの中で良い方法はないか考えてた。
結局 shiro さんの「display に1つ前の display の参照を持たせては?」というアドバイスをヒントにしてうまくいった。

  • frame pointer は sp と arg-length から復元
  • display は frame pointer から復元した display の次(つまり子供)

と設定してから jump 。


Scheme Compiler の勉強(29) - app の実装と EXC_BAD_ACCESS - cranebirdの日記でご指摘いただいたバグもこれで修正されました。

追記

しかしまた別のバグ発見。もうひとふんばりだな。こりゃ。