From 6018dcfdf6e6375dd01d5819aac6cc4499d18754 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 28 Feb 2018 14:23:22 -0700 Subject: [PATCH] expander: propagate module properties to `#%module-begin` Closes #1968 --- .../racket-test-core/tests/racket/module.rktl | 22 +++++++++++++++++++ racket/src/expander/expand/module.rkt | 2 +- racket/src/racket/src/startup.inc | 3 ++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/module.rktl b/pkgs/racket-test-core/tests/racket/module.rktl index c9bf4cec31..79e7032567 100644 --- a/pkgs/racket-test-core/tests/racket/module.rktl +++ b/pkgs/racket-test-core/tests/racket/module.rktl @@ -2331,6 +2331,28 @@ case of module-leve bindings; it doesn't cover local bindings. (test 0 dynamic-require ''uses-a-namespace-to-mutate-x 'done) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check that syntax properties are propagated from a +;; `module` form to an implicit `#%module-begin` + +(module module-begin-to-export-foo-property racket/base + (require (for-syntax racket/base)) + (provide (rename-out [mb #%module-begin])) + + (define-syntax (mb stx) + (with-syntax ([FOO-PROP (syntax-property stx 'foo)]) + #'(#%module-begin + (provide prop) + (define prop 'FOO-PROP))))) + +(eval (syntax-property + (datum->syntax + #f + '(module export-foo-property-as-bar 'module-begin-to-export-foo-property)) + 'foo "bar")) + +(test "bar" dynamic-require ''export-foo-property-as-bar 'prop) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/expander/expand/module.rkt b/racket/src/expander/expand/module.rkt index 4a1ee682ff..f6c7ba035b 100644 --- a/racket/src/expander/expand/module.rkt +++ b/racket/src/expander/expand/module.rkt @@ -614,7 +614,7 @@ ;; If `mb-id` is not bound, we'd like to give a clear error message (unless (resolve mb-id phase) (raise-syntax-error #f "no #%module-begin binding in the module's language" s)) - (define mb (datum->syntax disarmed-scopes-s `(,mb-id ,@bodys) s)) + (define mb (datum->syntax disarmed-scopes-s `(,mb-id ,@bodys) s s)) (log-expand mb-ctx 'tag mb) (when log-rename-one? (log-expand mb-ctx 'rename-one mb)) diff --git a/racket/src/racket/src/startup.inc b/racket/src/racket/src/startup.inc index 039136ed33..453bae31f8 100644 --- a/racket/src/racket/src/startup.inc +++ b/racket/src/racket/src/startup.inc @@ -71822,7 +71822,8 @@ static const char *startup_source = " \"no #%module-begin binding in the module's language\"" " s_759)))" "(values))))" -"(let-values(((mb_2)(datum->syntax$1 disarmed-scopes-s_0(list* mb-id_0 bodys_19) s_759)))" +"(let-values(((mb_2)" +"(datum->syntax$1 disarmed-scopes-s_0(list* mb-id_0 bodys_19) s_759 s_759)))" "(let-values((()" "(begin" "(let-values(((obs_132)(expand-context-observer mb-ctx_1)))"