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:
Matthew Flatt 2015-03-05 11:21:25 -07:00
parent 0c2ca96ad2
commit c458cd9799
3 changed files with 1 additions and 40 deletions

View File

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

View File

@ -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: */

View File

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