Open4
Ribbitをevalに対応させる

これでScheme準拠という点では最後。。もっとも、 yuni では eval
は (yuni scheme)
ライブラリに対して実施できれば十分(他のライブラリをimportできる必要は無い)ということにしている。このevalはマクロの展開に必要になる。

exit
を値のやりとりに使う
とりあえず VMとホスト言語とのやりとりができるプリミティブが今のところ exit
しか無いので、これを拡張して:
- 単にVM命令列が終端まで行った(mode = 0)
-
exit
が呼ばれた(mode = 1) -
eval
が終わった(mode =2)
の区別ができるようにした。後でもうちょっと真面目にやる。。

コンパイラをnamespaceする
とりあえず全体を define
で囲って、 compile-program
以外のシンボルが外部に出ないようにした。まだライブラリ毎に専用のグローバル変数の名前空間を用意していないので。。

とりあえずテスト通す
う〜〜〜〜〜〜ん。。動くけど、ちょっとこれはどうか。。
VM自体の起動のために1つと、フロントエンドとの更新用に2つプリミティブを足した。
が、そもそも、VMの外部も内部もSchemeなので直接データをやりとりすることができない。。苦慮の策ということで一旦シリアライズしてしまうことにした。超遅い。
read
と同様に、 eval
にはexpanderとの循環参照があるので、ロード後パッチする形で循環参照を断ち切っている。