From 8253994434b20a9703e8c9d8a954b7d8b5409dbc Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sun, 9 Mar 2014 08:43:40 -0600 Subject: [PATCH] create-embedding-executable: fix namespace and module-declaration problem --- .../tests/compiler/embed/embed-me24.rkt | 3 +++ .../compiler-test/tests/compiler/embed/test.rkt | 13 +++++++++++++ racket/collects/compiler/embed.rkt | 12 +++++++++--- 3 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 pkgs/compiler-pkgs/compiler-test/tests/compiler/embed/embed-me24.rkt diff --git a/pkgs/compiler-pkgs/compiler-test/tests/compiler/embed/embed-me24.rkt b/pkgs/compiler-pkgs/compiler-test/tests/compiler/embed/embed-me24.rkt new file mode 100644 index 0000000000..974da5b6fe --- /dev/null +++ b/pkgs/compiler-pkgs/compiler-test/tests/compiler/embed/embed-me24.rkt @@ -0,0 +1,3 @@ +#lang racket + +"Ok" diff --git a/pkgs/compiler-pkgs/compiler-test/tests/compiler/embed/test.rkt b/pkgs/compiler-pkgs/compiler-test/tests/compiler/embed/test.rkt index c56c8fd9e5..0d13194071 100644 --- a/pkgs/compiler-pkgs/compiler-test/tests/compiler/embed/test.rkt +++ b/pkgs/compiler-pkgs/compiler-test/tests/compiler/embed/test.rkt @@ -620,3 +620,16 @@ (try-reader) (try-planet) (try-*sl) + +;; ---------------------------------------- +;; Make sure that embedding does not break future module declarations + +(let () + (parameterize ([current-output-port (open-output-bytes)]) + (write-module-bundle + #:modules (list (list #f (collection-file-path "embed-me24.rkt" "tests" "compiler" "embed"))))) + + (parameterize ([read-accept-reader #t] + [current-namespace (make-base-namespace)]) + (eval (read (open-input-string "#lang racket 10"))))) + diff --git a/racket/collects/compiler/embed.rkt b/racket/collects/compiler/embed.rkt index a3b8ebef40..a09d32786d 100644 --- a/racket/collects/compiler/embed.rkt +++ b/racket/collects/compiler/embed.rkt @@ -489,10 +489,16 @@ ;; avoid potentially trying to redeclare cross-phase persistent modules, ;; since redeclaration isn't allowed: null - ;; check for run-time paths by visinting the module in a fresh - ;; namespace: + ;; check for run-time paths by visiting the module in an + ;; expand-time namespace: (parameterize ([current-namespace expand-namespace]) - (eval code) + (define no-submodule-code + ;; Strip away submodules to avoid re-declaring them: + (module-compiled-submodules + (module-compiled-submodules code #f null) + #t + null)) + (eval no-submodule-code) (let ([module-path (if (path? module-path) (path->complete-path module-path)