diff options
Diffstat (limited to 'module/language/scheme/spec.scm')
-rw-r--r-- | module/language/scheme/spec.scm | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/module/language/scheme/spec.scm b/module/language/scheme/spec.scm index c05236126..6cfbc422f 100644 --- a/module/language/scheme/spec.scm +++ b/module/language/scheme/spec.scm @@ -41,11 +41,7 @@ #:reader (lambda (port env) ;; Use the binding of current-reader from the environment. ;; FIXME: Handle `read-options' as well? - ((or (and=> (and=> (module-variable - (cond ((pair? env) (car env)) - (env) - (else (current-module))) - 'current-reader) + ((or (and=> (and=> (module-variable env 'current-reader) variable-ref) fluid-ref) read) @@ -55,4 +51,13 @@ #:decompilers `((tree-il . ,decompile-tree-il)) #:evaluator (lambda (x module) (primitive-eval x)) #:printer write - ) + #:make-default-environment + (lambda () + ;; Ideally we'd duplicate the whole module hierarchy so that `set!', + ;; `fluid-set!', etc. don't have any effect in the current environment. + (let ((m (make-fresh-user-module))) + ;; Provide a separate `current-reader' fluid so that + ;; compile-time changes to `current-reader' are + ;; limited to the current compilation unit. + (module-define! m 'current-reader (make-fluid)) + m))) |