diff --git a/pkgs/racket-test-core/tests/racket/macro.rktl b/pkgs/racket-test-core/tests/racket/macro.rktl index 691ac74903..15f01b4bea 100644 --- a/pkgs/racket-test-core/tests/racket/macro.rktl +++ b/pkgs/racket-test-core/tests/racket/macro.rktl @@ -2261,6 +2261,18 @@ (test '(#t #t) dynamic-require ''uses-definition-context-and-local-expand-to-replace 'result) +;; ---------------------------------------- +;; Check that a rename transformer mapped to a +;; primitive is ok in the result of a local expansion + +(module module-begin-with-a-rename-transformer racket/base + (require (for-syntax racket/base)) + + (define-syntax m (make-rename-transformer #'#%expression)) + + (begin-for-syntax + (local-expand #'(#%plain-module-begin (m #f)) 'module-begin '()))) + ;; ---------------------------------------- (report-errs) diff --git a/racket/src/expander/expand/main.rkt b/racket/src/expander/expand/main.rkt index b962aba476..e2a51d198e 100644 --- a/racket/src/expander/expand/main.rkt +++ b/racket/src/expander/expand/main.rkt @@ -293,7 +293,11 @@ (define adj-s (avoid-current-expand-context (substitute-alternate-id s id) t ctx)) (log-expand ctx 'exit-macro s) (expand adj-s ctx)] - [(expand-context-should-not-encounter-macros? ctx) + [(and (expand-context-should-not-encounter-macros? ctx) + ;; It's ok to have a rename transformer whose target + ;; is a primitive form, so if it's a rename transformer, + ;; delay the check for another step + (not (rename-transformer? t))) (raise-syntax-error #f "encountered a macro binding in form that should be fully expanded" s)] diff --git a/racket/src/racket/src/startup.inc b/racket/src/racket/src/startup.inc index 8f35f1a4c9..12ab49c9c7 100644 --- a/racket/src/racket/src/startup.inc +++ b/racket/src/racket/src/startup.inc @@ -39603,7 +39603,9 @@ static const char *startup_source = "(void)))" "(let-values(((adj-s186_0) adj-s_0)((ctx187_0) ctx_23))" "(expand9.1 #f #f #f adj-s186_0 ctx187_0))))))" -"(if(expand-context-should-not-encounter-macros? ctx_23)" +"(if(if(expand-context-should-not-encounter-macros? ctx_23)" +"(not(1/rename-transformer? t_54))" +" #f)" "(let-values()" "(raise-syntax-error$1" " #f"