diff options
author | Andy Wingo <wingo@pobox.com> | 2009-02-19 16:59:21 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2009-02-19 16:59:21 +0100 |
commit | 984dce236bd742083f3f284c9fe7b93c2df9f908 (patch) | |
tree | 3b278a6d0614381c66d303840f71336d1e832294 | |
parent | 7fb4230060462f5169706b42abdc6c48cd6049da (diff) | |
download | guile-984dce236bd742083f3f284c9fe7b93c2df9f908.tar.gz |
var at toplevel works too
* module/language/ecmascript/compile-ghil.scm (comp): Fix the var form at
toplevel.
-rw-r--r-- | module/language/ecmascript/compile-ghil.scm | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/module/language/ecmascript/compile-ghil.scm b/module/language/ecmascript/compile-ghil.scm index 23a92a633..1b90f48c5 100644 --- a/module/language/ecmascript/compile-ghil.scm +++ b/module/language/ecmascript/compile-ghil.scm @@ -44,6 +44,9 @@ ,e ,l (ghil-var-at-module! ,e '(language ecmascript impl) ',sym #t)) ,args)) +(define-macro (@implv e l sym) + `(make-ghil-ref ,e ,l + (ghil-var-at-module! ,e '(language ecmascript impl) ',sym #t))) (define (comp x e) (let ((l (location x))) @@ -69,9 +72,22 @@ (make-ghil-inline e l 'mul (list (comp a e) (comp b e)))) ((ref ,id) (make-ghil-ref e l (ghil-var-for-ref! e id))) - ((var ,id ,val) - (make-ghil-define e l (ghil-var-define! (ghil-env-parent e) id) - (comp val e))) + ((var . ,forms) + (make-ghil-begin e l + (map (lambda (form) + (pmatch form + ((,x ,y) + (make-ghil-define e l + (ghil-var-define! + (ghil-env-parent e) x) + (comp y e))) + ((,x) + (make-ghil-define e l + (ghil-var-define! + (ghil-env-parent e) x) + (@implv e l *undefined*))) + (else (error "bad var form" form)))) + forms))) ((begin . ,forms) (make-ghil-begin e l (map (lambda (x) (comp x e)) forms))) ((lambda ,formals ,body) |