fix problem with module->namespace and shadowing initial imports (pr 10264) (merge to 4.2)
svn: r14994
This commit is contained in:
parent
af2e5beb4e
commit
5c103eed59
|
@ -455,6 +455,49 @@
|
|||
(test '#(tests/mzscheme/lang/getinfo get-info closure-data)
|
||||
module->language-info 'tests/mzscheme/langm))))
|
||||
|
||||
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Check shadowing of initial imports:
|
||||
|
||||
(let ([m-code '(module m scheme/base (define-syntax-rule (lambda . _) 5) (provide lambda))]
|
||||
[n-code '(module n scheme/base
|
||||
(require 'm)
|
||||
(define five (lambda (x) x))
|
||||
(define five-stx #'lambda)
|
||||
(provide five five-stx))]
|
||||
[p-code '(module p scheme/base
|
||||
(require 'n)
|
||||
(define same? (free-identifier=? #'lambda five-stx))
|
||||
(provide same?))])
|
||||
(let ([ns (make-base-namespace)])
|
||||
(eval m-code ns)
|
||||
(eval '(require 'm) ns)
|
||||
(test 5 eval '(lambda (x) x) ns)
|
||||
(let ([m-ns (eval '(module->namespace ''m) ns)])
|
||||
(test 5 eval '(lambda (x) x) m-ns))
|
||||
(eval n-code ns)
|
||||
(eval '(require 'n) ns)
|
||||
(test 5 eval 'five ns)
|
||||
(eval p-code ns)
|
||||
(eval '(require 'p) ns)
|
||||
(test #f eval 'same? ns)
|
||||
(let ([n-ns (eval '(module->namespace ''n) ns)])
|
||||
(test 5 eval '(lambda (x) x) n-ns)))
|
||||
(let ([ns (make-base-namespace)])
|
||||
(eval m-code ns)
|
||||
(let ([n-zo (let ([s (open-output-bytes)])
|
||||
(parameterize ([current-namespace ns])
|
||||
(write (compile n-code) s))
|
||||
(parameterize ([read-accept-compiled #t])
|
||||
(read (open-input-bytes (get-output-bytes s)))))])
|
||||
(eval n-zo ns)
|
||||
(eval '(require 'n) ns)
|
||||
(test 5 eval 'five ns)
|
||||
(eval p-code ns)
|
||||
(eval '(require 'p) ns)
|
||||
(test #f eval 'same? ns)
|
||||
(let ([n-ns (eval '(module->namespace ''n) ns)])
|
||||
(test 5 eval '(lambda (x) x) n-ns)))))
|
||||
|
||||
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(report-errs)
|
||||
|
|
|
@ -2404,8 +2404,8 @@ void scheme_prep_namespace_rename(Scheme_Env *menv)
|
|||
}
|
||||
|
||||
if (l) {
|
||||
/* Shouldn't we do initial import first, to get shadowing
|
||||
right? Somehow, it seems to work this way. */
|
||||
/* Do initial import first to get shadowing right: */
|
||||
l = scheme_reverse(l);
|
||||
for (; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) {
|
||||
idx = SCHEME_CAR(l);
|
||||
name = scheme_module_resolve(idx, 0);
|
||||
|
|
Loading…
Reference in New Issue
Block a user