summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-02-19 16:59:21 +0100
committerAndy Wingo <wingo@pobox.com>2009-02-19 16:59:21 +0100
commit984dce236bd742083f3f284c9fe7b93c2df9f908 (patch)
tree3b278a6d0614381c66d303840f71336d1e832294
parent7fb4230060462f5169706b42abdc6c48cd6049da (diff)
downloadguile-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.scm22
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)