emptied the namespace when executing a module

svn: r9923
This commit is contained in:
Robby Findler 2008-05-21 17:43:14 +00:00
parent c5ef53525a
commit c5f4bc9e20
5 changed files with 579 additions and 561 deletions

View File

@ -567,7 +567,7 @@
(super-new))) (super-new)))
;; create-module-based-language-executable : ;; create-module-based-language-executable :
;; (is-a?/c area-container<%>) string module-spec module-spec sexp (union boolean? 'ask) boolean? ;; (is-a?/c area-container<%>) string (or #f module-spec) module-spec sexp (union boolean? 'ask) boolean?
;; -> void ;; -> void
(define (create-module-based-language-executable parent (define (create-module-based-language-executable parent
program-filename program-filename
@ -890,11 +890,13 @@
(call-with-output-file bootstrap-tmp-filename (call-with-output-file bootstrap-tmp-filename
(λ (port) (λ (port)
(write `(let () ;; cannot use begin, since it gets flattened to top-level (and re-compiled!) (write `(let () ;; cannot use begin, since it gets flattened to top-level (and re-compiled!)
,@(if use-copy? ,@(if module-language-spec
(list (if use-copy?
`(namespace-require/copy ',module-language-spec)) (list
(list `(namespace-require/copy ',module-language-spec))
`(namespace-require/constant ',module-language-spec))) (list
`(namespace-require/constant ',module-language-spec)))
'())
,@(if transformer-module-language-spec ,@(if transformer-module-language-spec
(list `(namespace-require `(for-syntax ,transformer-module-language-spec))) (list `(namespace-require `(for-syntax ,transformer-module-language-spec)))
(list)) (list))
@ -914,11 +916,16 @@
#:exists 'truncate #:mode 'text))) #:exists 'truncate #:mode 'text)))
(let* ([pre-to-be-embedded-module-specs0 (let* ([pre-to-be-embedded-module-specs0
(if (or (not transformer-module-language-spec) (cond
(equal? module-language-spec transformer-module-language-spec)) [(and module-language-spec transformer-module-language-spec)
(list module-language-spec) (if (equal? module-language-spec transformer-module-language-spec)
(list module-language-spec (list module-language-spec)
transformer-module-language-spec))] (list module-language-spec transformer-module-language-spec))]
[module-language-spec
(list module-language-spec)]
[transformer-module-language-spec
(list transformer-module-language-spec)]
[else '()])]
[pre-to-be-embedded-module-specs1 [pre-to-be-embedded-module-specs1
(if gui? (if gui?
(cons '(lib "mred/mred.ss") (cons '(lib "mred/mred.ss")
@ -969,7 +976,7 @@
gui? gui?
use-copy?)))) use-copy?))))
;; create-module-based-distribution : ... -> void (see docs) ;; create-distribution-for-executable : ... -> void (see docs)
(define (create-distribution-for-executable distribution-filename (define (create-distribution-for-executable distribution-filename
gui? gui?
make-executable) make-executable)
@ -1116,7 +1123,7 @@
(path->string executable-filename) (path->string executable-filename)
executable-filename)))) executable-filename))))
;; initialize-module-based-language : boolean module-spec module-spec ((-> void) -> void) ;; initialize-module-based-language : boolean (or #f module-spec) module-spec ((-> void) -> void)
(define (initialize-module-based-language use-copy? (define (initialize-module-based-language use-copy?
module-spec module-spec
transformer-module-spec transformer-module-spec
@ -1127,9 +1134,10 @@
(λ (x) (λ (x)
(display (exn-message x)) (display (exn-message x))
(newline))]) (newline))])
(if use-copy? (when module-spec
(namespace-require/copy module-spec) (if use-copy?
(namespace-require/constant module-spec)) (namespace-require/copy module-spec)
(namespace-require/constant module-spec)))
(when transformer-module-spec (when transformer-module-spec
(namespace-require `(for-syntax ,transformer-module-spec))))))) (namespace-require `(for-syntax ,transformer-module-spec)))))))

View File

@ -41,7 +41,8 @@
to-be-copied-module-names) to-be-copied-module-names)
(namespace-set-variable-value! 'argv program-argv) (namespace-set-variable-value! 'argv program-argv)
(current-command-line-arguments program-argv) (current-command-line-arguments program-argv)
(namespace-require language-module-spec) (when language-module-spec
(namespace-require language-module-spec))
(when use-require/copy? (when use-require/copy?
(namespace-require/copy language-module-spec)) (namespace-require/copy language-module-spec))
(when transformer-module-spec (when transformer-module-spec

File diff suppressed because it is too large Load Diff

View File

@ -1198,7 +1198,8 @@ all of the names in the tools library, for use defining keybindings
@scheme[module-language-spec] and @scheme[module-language-spec] and
@scheme[transformer-module-language-spec] specify the @scheme[transformer-module-language-spec] specify the
settings of the initial namespace, both the transformer settings of the initial namespace, both the transformer
portion and the regular portion. portion and the regular portion. Both may be @scheme[#f]
to indicate there are no initial bindings.
The @scheme[init-code] argument is an s-expression representing The @scheme[init-code] argument is an s-expression representing
the code for a module. This module is expected to provide the code for a module. This module is expected to provide

View File

@ -120,6 +120,11 @@
"x" "x"
"2") "2")
(make-test
"#lang scheme\n(eval 'cons)"
#f
". compile: bad syntax; reference to top-level identifier is not allowed, because no #%top syntax transformer is bound in: cons")
(make-test (make-test
(format "~s" `(module m (file ,(path->string (build-path this-dir "module-lang-test-tmp.ss"))) 1 2 3)) (format "~s" `(module m (file ,(path->string (build-path this-dir "module-lang-test-tmp.ss"))) 1 2 3))
"1" ;; just make sure no errors. "1" ;; just make sure no errors.