(expansion-eval-closure, env->eval-closure): New.
authorMarius Vollmer <mvo@zagadka.de>
Wed, 4 Sep 2002 21:33:33 +0000 (21:33 +0000)
committerMarius Vollmer <mvo@zagadka.de>
Wed, 4 Sep 2002 21:33:33 +0000 (21:33 +0000)
(sc-macro): Set the expansion-eval-closure expanding the form.
(putprop, getprop): Use the expansion-eval-closure to find
variables instead of the current module.

ice-9/syncase.scm

index 8d61bd1..fff3ca1 100644 (file)
 
 \f
 
+(define expansion-eval-closure (make-fluid))
+
+(define (env->eval-closure env)
+  (or (and env
+          (car (last-pair env)))
+      (module-eval-closure the-root-module)))
+
 (define sc-macro
   (procedure->memoizing-macro
     (lambda (exp env)
-      (sc-expand exp))))
+      (with-fluids ((expansion-eval-closure (env->eval-closure env)))
+        (sc-expand exp)))))
+
+(fluid-set! expansion-eval-closure (env->eval-closure #f))
 
 ;;; Exported variables
 
                          '())))
 
 (define the-syncase-module (current-module))
+(define the-syncase-eval-closure (module-eval-closure the-syncase-module))
 
 (define (putprop symbol key binding)
-  (let* ((m (current-module))
-        (v (or (module-variable m symbol)
-               (module-make-local-var! m symbol))))
+  (let* ((v ((fluid-ref expansion-eval-closure) symbol #t)))
     (if (symbol-property symbol 'primitive-syntax)
-       (if (eq? (current-module) the-syncase-module)
+       (if (eq? (fluid-ref expansion-eval-closure) the-syncase-eval-closure)
            (set-object-property! (module-variable the-root-module symbol)
                                  key
                                  binding))
     (set-object-property! v key binding)))
 
 (define (getprop symbol key)
-  (let* ((m (current-module))
-        (v (module-variable m symbol)))
+  (let* ((v ((fluid-ref expansion-eval-closure) symbol #f)))
     (and v (or (object-property v key)
               (let ((root-v (module-local-variable the-root-module symbol)))
                 (and (equal? root-v v)