From c458cd97996d6ff6fd1eda7d6523915d7c2cdc75 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 5 Mar 2015 11:21:25 -0700 Subject: [PATCH] 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. --- racket/src/racket/src/env.c | 26 -------------------------- racket/src/racket/src/module.c | 13 +------------ racket/src/racket/src/schpriv.h | 2 -- 3 files changed, 1 insertion(+), 40 deletions(-) diff --git a/racket/src/racket/src/env.c b/racket/src/racket/src/env.c index 37f09a115b..e3418877ad 100644 --- a/racket/src/racket/src/env.c +++ b/racket/src/racket/src/env.c @@ -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) { diff --git a/racket/src/racket/src/module.c b/racket/src/racket/src/module.c index 670518200d..685a4fc2d0 100644 --- a/racket/src/racket/src/module.c +++ b/racket/src/racket/src/module.c @@ -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: */ diff --git a/racket/src/racket/src/schpriv.h b/racket/src/racket/src/schpriv.h index 21680d0d5a..d59ee5b666 100644 --- a/racket/src/racket/src/schpriv.h +++ b/racket/src/racket/src/schpriv.h @@ -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);