display 実装の前に - Scheme VM を書く
display 実装の前に不明瞭な点を1つずつ解決しよう。
1. free variables の探索
(lambda (y) y outer1 (let1 z 1 y outer2 z))
lambda のコンパイル時の free variables は outer1 と outer 2。let1の中も探さないといけない。
let のコンパイル時の free variables は y と outer2 。
処理を少しでも速くしたいので union は収集の最後で行うこと。
2. set! の探索
ローカル変数が set! されるかどうかを調べ、set! されるようであれば box のコードを出力する。
free variables との関係は良く考えれば分かる。free variable が参照される時点で外側の let/lambda で box コードになっているので free variables に対する set! はこの処理だけでカバーできている。