From 9f5324b754f149af4d91c111485a98faf1029e73 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 23 Nov 2012 08:30:01 -0700 Subject: [PATCH] fix quoted submodule path in `all-from-out' --- collects/tests/racket/submodule.rktl | 14 ++++++++++++++ src/racket/src/module.c | 11 +++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/collects/tests/racket/submodule.rktl b/collects/tests/racket/submodule.rktl index 6300862dbe..1175bd82cc 100644 --- a/collects/tests/racket/submodule.rktl +++ b/collects/tests/racket/submodule.rktl @@ -783,6 +783,20 @@ (module local-expand-lang-test 'local-expand-lang (module m 'local-expand-lang2)) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; check that quoted submodule paths work with `all-from-out': + +(module has-submodule-all-from-out racket/base + (module a racket/base + (define x-from-submodule-out 10) + (provide x-from-submodule-out)) + + (require 'a) + (void x-from-submodule-out) + (provide (all-from-out 'a))) +(require 'has-submodule-all-from-out) +(test 10 values x-from-submodule-out) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/src/racket/src/module.c b/src/racket/src/module.c index 260eeefb30..5369bea095 100644 --- a/src/racket/src/module.c +++ b/src/racket/src/module.c @@ -153,6 +153,12 @@ static void check_formerly_unbound(Scheme_Object *unbounds, Scheme_Comp_Env *env static void install_stops(Scheme_Comp_Env *xenv, int phase, Scheme_Object **_begin_for_syntax_stx); static int is_modulestar_stop(Scheme_Comp_Env *env); +typedef int (*Convert_Submodule_Proc)(Scheme_Object *mp, Scheme_Object *data); +static Scheme_Object *convert_submodule_path(Scheme_Object *name, + Convert_Submodule_Proc check, + Scheme_Object *check_data); +static int check_is_submodule(Scheme_Object *modname, Scheme_Object *_genv); + static Scheme_Object *scheme_sys_wraps_phase_worker(intptr_t p); #define cons scheme_make_pair @@ -9841,6 +9847,9 @@ Scheme_Object *scheme_module_imported_list(Scheme_Env *genv, Scheme_Object *bind } else { Scheme_Object *reprovided; + modpath = convert_submodule_path(modpath, check_is_submodule, + (Scheme_Object *)genv); + reprovided = scheme_make_pair(scheme_make_pair(modpath, scheme_make_pair(scheme_false, scheme_null)), @@ -10883,8 +10892,6 @@ void parse_provides(Scheme_Object *form, Scheme_Object *fst, Scheme_Object *e, } } -typedef int (*Convert_Submodule_Proc)(Scheme_Object *mp, Scheme_Object *data); - static int check_in_hash(Scheme_Object *mp, Scheme_Object *data) { Scheme_Object *v;