only allow `define' at toplevel
authorAndy Wingo <wingo@pobox.com>
Sun, 11 May 2008 20:37:35 +0000 (22:37 +0200)
committerAndy Wingo <wingo@pobox.com>
Sun, 11 May 2008 20:37:35 +0000 (22:37 +0200)
* module/language/scheme/translate.scm (trans-pair): Add a guard to only
  allow `define' at the top level; other defines are already filtered out
  via trans-body.

* module/system/il/ghil.scm (ghil-env-toplevel?): Export, and fix.

module/language/scheme/translate.scm
module/system/il/ghil.scm

index afa2276..c5322f1 100644 (file)
     ((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))))
 
index d70f4f0..fe241b3 100644 (file)
@@ -82,6 +82,7 @@
    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))