From 3f2fd06cb0c25d46734b968aa52d0b74523b1640 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 9 Mar 2018 16:32:19 -0700 Subject: [PATCH] expander: fix `namespace-require/copy` --- pkgs/racket-test-core/tests/racket/namespac.rktl | 10 ++++++++++ racket/src/expander/expand/require.rkt | 5 ++--- racket/src/racket/src/startup.inc | 6 ++---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/namespac.rktl b/pkgs/racket-test-core/tests/racket/namespac.rktl index 7cb290d286..d008b3175a 100644 --- a/pkgs/racket-test-core/tests/racket/namespac.rktl +++ b/pkgs/racket-test-core/tests/racket/namespac.rktl @@ -307,6 +307,16 @@ (namespace-require/constant 'racket/base) (err/rt-test (eval '(define + -)) #rx"cannot change constant")) +;; ---------------------------------------- +;; Check that `namespace-require/copy` does define variables +;; but doesn't bind as required + +(parameterize ([current-namespace (make-base-empty-namespace)]) + (namespace-require/copy 'racket/base) + (test (void) eval '(void)) + (test #f identifier-binding (namespace-syntax-introduce (datum->syntax #f 'void))) + (test #t list? (identifier-binding (namespace-syntax-introduce (datum->syntax #f 'lambda))))) + ;; ---------------------------------------- ;; Check that bulk `require` replaces individual bindings diff --git a/racket/src/expander/expand/require.rkt b/racket/src/expander/expand/require.rkt index 1f9007c0f6..08722d7aa6 100644 --- a/racket/src/expander/expand/require.rkt +++ b/racket/src/expander/expand/require.rkt @@ -343,11 +343,10 @@ #:as-transformer? as-transformer?)) skip-bind?] [else #f])) - (when (and adjusted-sym - copy-variable-phase-level + (when (and copy-variable-phase-level (not as-transformer?) (equal? provide-phase copy-variable-phase-level)) - (copy-namespace-value m-ns adjusted-sym binding copy-variable-phase-level phase-shift + (copy-namespace-value m-ns sym binding copy-variable-phase-level phase-shift copy-variable-as-constant?)) (and (not skip-bind?) adjusted-sym)))) ;; Now that a bulk binding is in place, update to merge nominals: diff --git a/racket/src/racket/src/startup.inc b/racket/src/racket/src/startup.inc index ce140f3a78..638933aab2 100644 --- a/racket/src/racket/src/startup.inc +++ b/racket/src/racket/src/startup.inc @@ -25310,8 +25310,7 @@ static const char *startup_source = "(let-values()" " #f))))" "(begin" -"(if(if adjusted-sym_0" -"(if copy-variable-phase-level_1" +"(if(if copy-variable-phase-level_1" "(if(not" " as-transformer?_3)" "(equal?" @@ -25319,11 +25318,10 @@ static const char *startup_source = " copy-variable-phase-level_1)" " #f)" " #f)" -" #f)" "(let-values()" "(copy-namespace-value" " m-ns_10" -" adjusted-sym_0" +" sym_42" " binding_16" " copy-variable-phase-level_1" " phase-shift_11"