mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-12 14:50:19 +02:00
var at toplevel works too
* module/language/ecmascript/compile-ghil.scm (comp): Fix the var form at toplevel.
This commit is contained in:
parent
7fb4230060
commit
984dce236b
1 changed files with 19 additions and 3 deletions
|
@ -44,6 +44,9 @@
|
||||||
,e ,l
|
,e ,l
|
||||||
(ghil-var-at-module! ,e '(language ecmascript impl) ',sym #t))
|
(ghil-var-at-module! ,e '(language ecmascript impl) ',sym #t))
|
||||||
,args))
|
,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)
|
(define (comp x e)
|
||||||
(let ((l (location x)))
|
(let ((l (location x)))
|
||||||
|
@ -69,9 +72,22 @@
|
||||||
(make-ghil-inline e l 'mul (list (comp a e) (comp b e))))
|
(make-ghil-inline e l 'mul (list (comp a e) (comp b e))))
|
||||||
((ref ,id)
|
((ref ,id)
|
||||||
(make-ghil-ref e l (ghil-var-for-ref! e id)))
|
(make-ghil-ref e l (ghil-var-for-ref! e id)))
|
||||||
((var ,id ,val)
|
((var . ,forms)
|
||||||
(make-ghil-define e l (ghil-var-define! (ghil-env-parent e) id)
|
(make-ghil-begin e l
|
||||||
(comp val e)))
|
(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)
|
((begin . ,forms)
|
||||||
(make-ghil-begin e l (map (lambda (x) (comp x e)) forms)))
|
(make-ghil-begin e l (map (lambda (x) (comp x e)) forms)))
|
||||||
((lambda ,formals ,body)
|
((lambda ,formals ,body)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue