remove over-eager namespace cleanup in the compiler/expander
The compiler/expander attempted to clear out references in a namespace used only during macro expansion, but it's possible for references to be retained (via unusual macros), so get rid of the broken attempt to help the GC.
This commit is contained in:
parent
0c2ca96ad2
commit
c458cd9799
|
@ -1240,32 +1240,6 @@ Scheme_Bucket_Table *scheme_clone_toplevel(Scheme_Bucket_Table *ht, Scheme_Env *
|
|||
return r;
|
||||
}
|
||||
|
||||
void scheme_clean_dead_env(Scheme_Env *env)
|
||||
{
|
||||
Scheme_Object *modchain, *next;
|
||||
|
||||
if (env->exp_env) {
|
||||
env->exp_env->template_env = NULL;
|
||||
scheme_clean_dead_env(env->exp_env);
|
||||
env->exp_env = NULL;
|
||||
}
|
||||
if (env->template_env) {
|
||||
env->template_env->exp_env = NULL;
|
||||
scheme_clean_dead_env(env->template_env);
|
||||
env->template_env = NULL;
|
||||
}
|
||||
|
||||
env->modvars = NULL;
|
||||
|
||||
modchain = env->modchain;
|
||||
env->modchain = NULL;
|
||||
while (modchain && !SCHEME_VECTORP(modchain)) {
|
||||
next = SCHEME_VEC_ELS(modchain)[1];
|
||||
SCHEME_VEC_ELS(modchain)[1] = scheme_void;
|
||||
modchain = next;
|
||||
}
|
||||
}
|
||||
|
||||
Scheme_Object *scheme_get_home_weak_link(Scheme_Env *e)
|
||||
{
|
||||
if (!e->weak_self_link) {
|
||||
|
|
|
@ -8192,7 +8192,7 @@ static void flush_definitions(Scheme_Env *genv)
|
|||
static Scheme_Object *do_module_begin(Scheme_Object *orig_form, Scheme_Comp_Env *env,
|
||||
Scheme_Compile_Expand_Info *rec, int drec)
|
||||
{
|
||||
int num_phases, *_num_phases, i, exicount, *all_simple_renames, can_clean, has_submodules;
|
||||
int num_phases, *_num_phases, i, exicount, *all_simple_renames, has_submodules;
|
||||
Scheme_Hash_Tree *all_defs;
|
||||
Scheme_Hash_Table *tables, *all_defs_out, *all_provided, *all_reprovided, *modidx_cache;
|
||||
Scheme_Module_Export_Info **exp_infos, *exp_info;
|
||||
|
@ -8379,18 +8379,10 @@ static Scheme_Object *do_module_begin(Scheme_Object *orig_form, Scheme_Comp_Env
|
|||
genv = genv->exp_env;
|
||||
}
|
||||
|
||||
if (rec[drec].comp || (rec[drec].depth != -2))
|
||||
can_clean = 1;
|
||||
else
|
||||
can_clean = 0;
|
||||
|
||||
has_submodules = (!SCHEME_NULLP(bxs->saved_submodules)
|
||||
|| (env->genv->module->submodule_path
|
||||
&& !SCHEME_NULLP(env->genv->module->submodule_path)));
|
||||
|
||||
if (can_clean && !has_submodules)
|
||||
scheme_clean_dead_env(env->genv);
|
||||
|
||||
if (!rec[drec].comp) {
|
||||
Scheme_Module_Phase_Exports *rt = env->genv->module->me->rt;
|
||||
int excount = rt->num_provides;
|
||||
|
@ -8564,9 +8556,6 @@ static Scheme_Object *do_module_begin(Scheme_Object *orig_form, Scheme_Comp_Env
|
|||
if (!rec[drec].comp) {
|
||||
(void)fixup_expanded(expanded_l, expanded_modules, 0, MODULE_MODFORM_KIND);
|
||||
}
|
||||
|
||||
if (can_clean)
|
||||
scheme_clean_dead_env(env->genv);
|
||||
}
|
||||
|
||||
/* Return module or expanded code: */
|
||||
|
|
|
@ -3563,8 +3563,6 @@ Scheme_Bucket_Table *scheme_clone_toplevel(Scheme_Bucket_Table *ht, Scheme_Env *
|
|||
|
||||
Scheme_Env *scheme_copy_module_env(Scheme_Env *menv, Scheme_Env *ns, Scheme_Object *modchain, int clone);
|
||||
|
||||
void scheme_clean_dead_env(Scheme_Env *env);
|
||||
|
||||
Scheme_Module *scheme_extract_compiled_module(Scheme_Object *o);
|
||||
|
||||
int scheme_is_kernel_modname(Scheme_Object *modname);
|
||||
|
|
Loading…
Reference in New Issue
Block a user