とりあえず何をしたか。
問題になっていたのは内部defineとdefine-syntaxそれにlet(rec)-syntaxの3つを解決するために非常にややこしい方法でやっていたのだが、ざくっと以下のように変更した。
- bodyを解決するためにコンパイル時環境を2本用意。
- 初期値は同値
- 内部defineを見つけたらlvarを作って環境に放り込む(まだ値の初期化はしない)
- define-syntaxを見つけたらマクロにコンパイルして環境に放り込む
- let(rec)-syntaxを見つけたらマクロに変更してメタ環境のほうに放り込む
これは第一段階の変更として施したもので、処理の単純化と次への準備である。
次の一手として以下のことを考えている
- let(rec)-syntaxを見つけたらメタ環境を利用してbody部分を展開もしくは内部表現まで落とし込む
- その途中で見つけた内部define及びdefine-syntaxは位置が正しければもう一本の環境に破壊的に追加する
- 最終的に展開もしくは内部表現まで落としたものをマージする
No comments:
Post a Comment