fix bug in namespace-mapped-symbols (related to PR 10858)

svn: r18801
This commit is contained in:
Matthew Flatt 2010-04-12 21:28:40 +00:00
parent f6a8e78cd6
commit 1a4c78fdb2
3 changed files with 12 additions and 4 deletions

View File

@ -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--; ) {

View File

@ -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);

View File

@ -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;
@ -1781,6 +1785,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)
hts = src->ht;