クロージャ対応
やっとクロージャが使えるようになった。
(define (k x) (lambda (y) x)) (print ((k 10) 20))
大変だったけれど、できてしまえばたいしたことない。
実現するにあたって、レキシカルスコープの実現方法を変更した。
レキシカルスコープの実現
いままでは、PushScopeでスコープを作っていた。しかし、これだとFindPropertyで探せないので、PushWithを使うようにした。
(let ([x 42]) (let ([x 10]) (print x)) (print x))
が
with({x:42}){ with({x:10}){ print(x); } print(x); }
に対応するイメージ。