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)
|
(test '#(tests/mzscheme/lang/getinfo get-info closure-data)
|
||||||
module->language-info 'tests/mzscheme/langm))))
|
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)
|
(report-errs)
|
||||||
|
|
|
@ -2404,8 +2404,8 @@ void scheme_prep_namespace_rename(Scheme_Env *menv)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (l) {
|
if (l) {
|
||||||
/* Shouldn't we do initial import first, to get shadowing
|
/* Do initial import first to get shadowing right: */
|
||||||
right? Somehow, it seems to work this way. */
|
l = scheme_reverse(l);
|
||||||
for (; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) {
|
for (; SCHEME_PAIRP(l); l = SCHEME_CDR(l)) {
|
||||||
idx = SCHEME_CAR(l);
|
idx = SCHEME_CAR(l);
|
||||||
name = scheme_module_resolve(idx, 0);
|
name = scheme_module_resolve(idx, 0);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user