From 6beff43439752b2a1ea61c1f90670ab43971211c Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 29 Aug 2015 11:44:33 -0600 Subject: [PATCH] fix `expand[-syntax[-to-top-form]]` to add namespace's scope Make `expand` more consistent with `eval` and with the old expander. --- pkgs/racket-test-core/tests/racket/macro.rktl | 20 +++++++++++++++++++ racket/src/racket/src/eval.c | 10 ++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/macro.rktl b/pkgs/racket-test-core/tests/racket/macro.rktl index 669056f3e1..6f6192b9ce 100644 --- a/pkgs/racket-test-core/tests/racket/macro.rktl +++ b/pkgs/racket-test-core/tests/racket/macro.rktl @@ -1335,6 +1335,26 @@ #'#t)]) (void (m))) +;; ---------------------------------------- +;; Check that `expand-syntax` attaches the namespace's + +(test 573 + 'expand + (parameterize ([current-namespace (make-base-namespace)]) + (eval '(require (for-syntax racket/base))) + (eval '(define-syntax (m stx) + (with-syntax ([id (datum->syntax #f 'gen-id)]) + #`(begin + (define id 573) + id)))) + (define stx (namespace-syntax-introduce (datum->syntax #f '(m)))) + (syntax-case (expand-syntax-to-top-form stx) (begin) + [(begin a b) + (begin + (eval-syntax #'a) + (eval-syntax (expand-syntax #'b)))]))) + + ;; ---------------------------------------- (report-errs) diff --git a/racket/src/racket/src/eval.c b/racket/src/racket/src/eval.c index 01cf3f8cee..5fed396a50 100644 --- a/racket/src/racket/src/eval.c +++ b/racket/src/racket/src/eval.c @@ -4620,6 +4620,12 @@ static void *expand_k(void) obj = scheme_top_introduce(obj, env->genv); } + if (rename && env->genv->stx_context) { + obj = scheme_stx_push_introduce_module_context(obj, env->genv->stx_context); + env->expand_result_adjust = scheme_stx_push_introduce_module_context; + env->expand_result_adjust_arg = env->genv->stx_context; + } + observer = scheme_get_expand_observe(); SCHEME_EXPAND_OBSERVE_START_EXPAND(observer); @@ -4694,10 +4700,6 @@ static void *expand_k(void) break; } - if (rename && !just_to_top) { - /* scheme_simplify_stx(obj, scheme_new_stx_simplify_cache()); */ /* too expensive */ - } - return obj; }