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の日記でご指摘いただいたバグもこれで修正されました。
追記
しかしまた別のバグ発見。もうひとふんばりだな。こりゃ。