Fluidize (runtime unsyntaxer) internal variable: substitutions.
authorMatt Birkholz <matt@birkholz.chandler.az.us>
Tue, 4 Feb 2014 22:10:59 +0000 (15:10 -0700)
committerMatt Birkholz <puck@birchwood-abbey.net>
Tue, 12 Aug 2014 00:30:28 +0000 (17:30 -0700)
src/runtime/unsyn.scm

index 0ba5ba7d6d46b09d9b0d86df987ab500743631c1..42e7887d37dad820cf8fc888975a37c1a78dd5e2 100644 (file)
@@ -30,6 +30,7 @@ USA.
 (declare (usual-integrations))
 \f
 (define (initialize-package!)
+  (set! substitutions (make-fluid '()))
   (set! unsyntaxer/scode-walker
        (make-scode-walker unsyntax-constant
                           `((ACCESS ,unsyntax-ACCESS-object)
@@ -63,13 +64,14 @@ USA.
 
 ;;; The substitutions mechanism is for putting the '### marker in
 ;;; debugger output.
-(define substitutions '())
+(define substitutions)
 
 (define (unsyntax-with-substitutions scode alist)
   (if (not (alist? alist))
       (error:wrong-type-argument alist "alist" 'UNSYNTAX-WITH-SUBSTITUTIONS))
-  (fluid-let ((substitutions alist))
-    (unsyntax scode)))
+  (let-fluid substitutions alist
+    (lambda ()
+      (unsyntax scode))))
 
 (define-integrable (maybe-substitute object thunk)
   (let ((association (has-substitution? object)))
@@ -78,8 +80,8 @@ USA.
        (thunk))))
 
 (define-integrable (has-substitution? object)
-  (and (pair? substitutions)
-       (assq object substitutions)))
+  (let ((substs (fluid substitutions)))
+    (and (pair? substs) (assq object substs))))
 
 (define (with-bindings environment lambda receiver)
   (if (and unsyntaxer:elide-global-accesses?