~ chicken-core (chicken-5) f8230a466ce3a86f360178f115fb62ee124448b9
commit f8230a466ce3a86f360178f115fb62ee124448b9
Author: Peter Bex <peter.bex@xs4all.nl>
AuthorDate: Sun Jun 30 18:50:09 2013 +0200
Commit: Christian Kellermann <ckeen@pestilenz.org>
CommitDate: Mon Jul 8 20:25:41 2013 +0200
Fix meta-evaluation to actually take place in the meta environment and add tests
Signed-off-by: Christian Kellermann <ckeen@pestilenz.org>
diff --git a/eval.scm b/eval.scm
index 3d571a9b..8d65f2ba 100644
--- a/eval.scm
+++ b/eval.scm
@@ -810,12 +810,15 @@
(define (##sys#eval/meta form)
(let ((oldcm (##sys#current-module))
(oldme (##sys#macro-environment))
+ (oldce (##sys#current-environment))
(mme (##sys#meta-macro-environment))
+ (cme (##sys#current-meta-environment))
(aee (##sys#active-eval-environment)))
(dynamic-wind
(lambda ()
(##sys#current-module #f)
(##sys#macro-environment mme)
+ (##sys#current-environment cme)
(##sys#active-eval-environment ##sys#current-meta-environment))
(lambda ()
((##sys#compile-to-closure
@@ -826,6 +829,8 @@
(lambda ()
(##sys#active-eval-environment aee)
(##sys#current-module oldcm)
+ (##sys#current-meta-environment (##sys#current-environment))
+ (##sys#current-environment oldce)
(##sys#meta-macro-environment (##sys#macro-environment))
(##sys#macro-environment oldme)))))
diff --git a/tests/meta-syntax-test.scm b/tests/meta-syntax-test.scm
index 2b5e4666..2f4b1c91 100755
--- a/tests/meta-syntax-test.scm
+++ b/tests/meta-syntax-test.scm
@@ -20,3 +20,12 @@
(lambda (e r c)
(call-it-123 list)))))
+(module foo-usage (foo-user)
+ (import chicken scheme)
+ (begin-for-syntax (import (prefix foo foo:)))
+ (define-syntax testing
+ (er-macro-transformer
+ (lambda (x r c)
+ `(,(r 'quote) ,@(foo:bar 1 2)))))
+ (define (foo-user)
+ (testing)))
diff --git a/tests/runtests.sh b/tests/runtests.sh
index 4fdd7fca..83c828db 100755
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -183,10 +183,10 @@ $compile syntax-tests-2.scm
./a.out
echo "======================================== meta-syntax tests ..."
-$interpret -bnq meta-syntax-test.scm -e '(import foo)' -e "(assert (equal? '((1)) (bar 1 2)))" -e "(assert (equal? '(list 1 2 3) (listify)))"
+$interpret -bnq meta-syntax-test.scm -e '(import foo)' -e "(assert (equal? '((1)) (bar 1 2)))" -e "(assert (equal? '(list 1 2 3) (listify)))" -e "(import foo-usage)" -e "(assert (equal? '(1) (foo-user)))"
$compile_s meta-syntax-test.scm -j foo
$compile_s foo.import.scm
-$interpret -bnq -e '(require-library meta-syntax-test)' -e '(import foo)' -e "(assert (equal? '((1)) (bar 1 2)))" -e "(assert (equal? '(list 1 2 3) (listify)))"
+$interpret -bnq -e '(require-library meta-syntax-test)' -e '(import foo)' -e "(assert (equal? '((1)) (bar 1 2)))" -e "(assert (equal? '(list 1 2 3) (listify)))" -e "(import foo-usage)" -e "(assert (equal? '(1) (foo-user)))"
echo "======================================== reexport tests ..."
$interpret -bnq reexport-tests.scm
Trap