diff --git a/src/mzscheme/src/env.c b/src/mzscheme/src/env.c index 63edb919ad..d38fd4d65c 100644 --- a/src/mzscheme/src/env.c +++ b/src/mzscheme/src/env.c @@ -4459,7 +4459,7 @@ namespace_mapped_symbols(int argc, Scheme_Object *argv[]) } if (env->rename_set) - scheme_list_module_rename(env->rename_set, mapped); + scheme_list_module_rename(env->rename_set, mapped, env->export_registry); l = scheme_null; for (i = mapped->size; i--; ) { diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index 8aa474cc19..959314d917 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -918,7 +918,7 @@ Scheme_Object *scheme_get_kernel_modidx(void); void scheme_remove_module_rename(Scheme_Object *mrn, Scheme_Object *localname); void scheme_append_module_rename(Scheme_Object *src, Scheme_Object *dest, int with_unmarshal); -void scheme_list_module_rename(Scheme_Object *src, Scheme_Hash_Table *ht); +void scheme_list_module_rename(Scheme_Object *src, Scheme_Hash_Table *ht, Scheme_Hash_Table *export_registry); Scheme_Object *scheme_rename_to_stx(Scheme_Object *rn); Scheme_Object *scheme_stx_to_rename(Scheme_Object *stx); diff --git a/src/mzscheme/src/stxobj.c b/src/mzscheme/src/stxobj.c index c14bca9f5e..ba3122e079 100644 --- a/src/mzscheme/src/stxobj.c +++ b/src/mzscheme/src/stxobj.c @@ -98,7 +98,6 @@ static Scheme_Object *lift_inactive_certs(Scheme_Object *o, int as_active); static Scheme_Object *write_free_id_info_prefix(Scheme_Object *obj); static Scheme_Object *read_free_id_info_prefix(Scheme_Object *obj, Scheme_Object *insp); - #ifdef MZ_PRECISE_GC static void register_traversers(void); #endif @@ -160,6 +159,10 @@ typedef struct Module_Renames { (box (cons sym sym)) => lexical binding */ } Module_Renames; +static void unmarshal_rename(Module_Renames *mrn, + Scheme_Object *modidx_shift_from, Scheme_Object *modidx_shift_to, + Scheme_Hash_Table *export_registry); + typedef struct Module_Renames_Set { Scheme_Object so; /* scheme_rename_table_set_type */ char kind, sealed; @@ -1764,7 +1767,8 @@ void scheme_remove_module_rename(Scheme_Object *mrn, scheme_hash_set(((Module_Renames *)mrn)->free_id_renames, localname, NULL); } -void scheme_list_module_rename(Scheme_Object *set, Scheme_Hash_Table *ht) +void scheme_list_module_rename(Scheme_Object *set, Scheme_Hash_Table *ht, + Scheme_Hash_Table *export_registry) { /* Put every name mapped by src into ht: */ Scheme_Object *pr; @@ -1780,6 +1784,10 @@ void scheme_list_module_rename(Scheme_Object *set, Scheme_Hash_Table *ht) if (!src) return; + + if (src->needs_unmarshal) { + unmarshal_rename(src, NULL, NULL, export_registry); + } for (t = 0; t < 2; t++) { if (!t)