((define)
(pmatch tail
;; (define NAME VAL)
- ((,name ,val) (guard (symbol? name))
+ ((,name ,val) (guard (symbol? name) (ghil-env-toplevel? e))
(make-ghil-define e l (ghil-lookup e name) (trans:x val)))
;; (define (NAME FORMALS...) BODY...)
(((,name . ,formals) . ,body) (guard (symbol? name))
;; -> (define NAME (lambda FORMALS BODY...))
- (let ((val (trans:x `(lambda ,formals ,@body))))
- (make-ghil-define e l (ghil-lookup e name) val)))
+ (trans:pair `(define ,name (lambda ,formals ,@body))))
(else (bad-syntax))))
ghil-env-mod ghil-env-parent ghil-env-table ghil-env-variables
ghil-primitive-macro? ghil-env-add! ghil-lookup
+ ghil-env-toplevel?
call-with-ghil-environment call-with-ghil-bindings))
\f
((<ghil-env> mod) (%make-ghil-env :mod mod :parent e))))
(define (ghil-env-toplevel? e)
- (eq? (ghil-env-mod e) (gil-env-parent e)))
+ (eq? (ghil-env-mod e) (ghil-env-parent e)))
(define (ghil-env-ref env sym)
(assq-ref (ghil-env-table env) sym))