fix dynamic-require on certain forms of re-export from #%kernel

Closes #1445
This commit is contained in:
Matthew Flatt 2016-09-01 09:18:36 -06:00
parent 5708526055
commit cd44e78211
2 changed files with 13 additions and 1 deletions

View File

@ -1816,6 +1816,17 @@ case of module-leve bindings; it doesn't cover local bindings.
(lambda (exn) (lambda (exn)
(regexp-match? #rx" already" (exn-message exn)))) (regexp-match? #rx" already" (exn-message exn))))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Check re-export of an identifier from `#%kernel`
;; through a rename transformer:
(module rexports-values-from-kernel racket/base
(require (for-syntax racket/base))
(provide f)
(define-syntax f (make-rename-transformer #'values)))
(dynamic-require ''rexports-values-from-kernel 'f)
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(report-errs) (report-errs)

View File

@ -1280,7 +1280,8 @@ static Scheme_Object *_dynamic_require(int argc, Scheme_Object *argv[],
srcm2 = module_load(srcmname, env, errname); srcm2 = module_load(srcmname, env, errname);
for (j = srcm2->me->rt->num_var_provides; j--; ) { for (j = srcm2->me->rt->num_var_provides; j--; ) {
if (SCHEME_FALSEP(srcm2->me->rt->provide_srcs[j]) if ((!srcm2->me->rt->provide_srcs
|| SCHEME_FALSEP(srcm2->me->rt->provide_srcs[j]))
&& SAME_OBJ(srcname, srcm2->me->rt->provide_src_names[j])) { && SAME_OBJ(srcname, srcm2->me->rt->provide_src_names[j])) {
/* simple re-export applies: */ /* simple re-export applies: */
srcm = srcm2; srcm = srcm2;