昨日 3imp のごく一部を和訳したら方法を思いついた。やっぱり英語を眺めているだけで余計に脳みそ使っているんだな。
整理
- let1 a (lambda () b) 問題に関しては解決方法が見えてきた
- (lambda のコンパイル時に free 変数として locals( =( (a) ) も考慮して free 変数用にコンパイルする
- REFER_LOCAL 0 1 ARGUMENT CLOSURE のような感じ
- REFER_LOCAL / ARGUMENT は free 変数の push。
- lambda 内では b は REFER_FREE 0
- ENTER の前と後どちらで ARGUMENT を積むか
- 先に積んでおかないと frame のサイズにアクセスできない
- 現在は正しいつみかたになっているが refer 1 0 とコンパイルされてしまうのがおかしい
- 直した
- 難しい局面は脱した
- [ok]2種類の free variables の説明を加える
- [OK]stackvm37を消す
- [OK]テストを追加
- [OK]テストを通せないものを吟味
- wiki が動くかどうか?