~ 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.scmTrap