~ chicken-core (chicken-5) 8434c5c578260f2ccc4d4ecba70d6d8f53f89d91
commit 8434c5c578260f2ccc4d4ecba70d6d8f53f89d91 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Tue Feb 22 09:02:24 2011 +0100 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Tue Feb 22 09:02:24 2011 +0100 keep macro environment extension in eval/meta diff --git a/eval.scm b/eval.scm index c3d28c6d..d08f3426 100644 --- a/eval.scm +++ b/eval.scm @@ -232,15 +232,23 @@ (##sys#eval-decorator p ll h cntr) ) (define (eval/meta form) - (parameterize ((##sys#current-module #f) - (##sys#macro-environment (##sys#meta-macro-environment))) - ;;XXX definitions extending the macro-env will be lost after - ;; this body exits, or not? - ((##sys#compile-to-closure - form - '() - (##sys#current-meta-environment)) - '() ) )) + (let ((oldcm (##sys#current-module)) + (oldme (##sys#macro-environment)) + (mme (##sys#meta-macro-environment))) + (dynamic-wind + (lambda () + (##sys#current-module #f) + (##sys#macro-environment mme)) + (lambda () + ((##sys#compile-to-closure + form + '() + (##sys#current-meta-environment)) + '() ) ) + (lambda () + (##sys#current-module oldcm) + (##sys#meta-macro-environment (##sys#macro-environment)) + (##sys#macro-environment oldme))))) (define (eval/elab form) ((##sys#compile-to-closureTrap