fix redundant-require checking
When a module defines and exports an identifier at two phases, and when another module imports both of them at the same phase, an error was not reported as it should have been.
This commit is contained in:
parent
96d212d376
commit
b1e406b5a7
|
@ -1795,6 +1795,27 @@ case of module-leve bindings; it doesn't cover local bindings.
|
|||
|
||||
(test 333 dynamic-require ''module-that-uses-eval-to-define-a-macro-in-its-own-namespace 'result)
|
||||
|
||||
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Check that multiple imports of a name are disallowed
|
||||
;; when they're from the from the same module but different
|
||||
;; phases of that module
|
||||
|
||||
(module defines-a-at-two-phase-levels racket/base
|
||||
(require (for-syntax racket/base))
|
||||
|
||||
(provide a (for-syntax a))
|
||||
|
||||
(define a 0)
|
||||
(begin-for-syntax
|
||||
(define a 1)))
|
||||
|
||||
(err/rt-test (eval #'(module b racket/base
|
||||
(require 'defines-a-at-two-phase-levels
|
||||
(for-syntax racket/base
|
||||
'defines-a-at-two-phase-levels))))
|
||||
(lambda (exn)
|
||||
(regexp-match? #rx" already" (exn-message exn))))
|
||||
|
||||
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(report-errs)
|
||||
|
|
|
@ -7956,7 +7956,8 @@ static void check_require_name(Scheme_Object *id, Scheme_Object *self_modidx,
|
|||
intptr_t fromsrclen = 0;
|
||||
|
||||
if (same_resolved_modidx(SCHEME_VEC_ELS(vec)[1], modidx)
|
||||
&& SAME_OBJ(SCHEME_VEC_ELS(vec)[2], exname)) {
|
||||
&& SAME_OBJ(SCHEME_VEC_ELS(vec)[2], exname)
|
||||
&& SAME_OBJ(SCHEME_VEC_ELS(vec)[8], scheme_make_integer(exet))) {
|
||||
/* already required, same source; add redundant nominal (for re-provides),
|
||||
and also add source phase for re-provides. */
|
||||
nml = scheme_make_pair(nominal_modidx, SCHEME_VEC_ELS(vec)[0]);
|
||||
|
|
Loading…
Reference in New Issue
Block a user