diff --git a/src/mzscheme/src/fun.c b/src/mzscheme/src/fun.c index c82158007a..46732d718f 100644 --- a/src/mzscheme/src/fun.c +++ b/src/mzscheme/src/fun.c @@ -875,6 +875,26 @@ Scheme_Object *combine_name_with_srcloc(Scheme_Object *name, Scheme_Object *code return name; } +Scheme_Object *scheme_build_closure_name(Scheme_Object *code, Scheme_Compile_Info *rec, int drec) +{ + Scheme_Object *name; + + name = scheme_stx_property(code, scheme_inferred_name_symbol, NULL); + if (name && SCHEME_SYMBOLP(name)) { + name = combine_name_with_srcloc(name, code, 0); + } else { + name = rec[drec].value_name; + if (!name || SCHEME_FALSEP(name)) { + name = scheme_source_to_name(code); + if (name) + name = combine_name_with_srcloc(name, code, 1); + } else { + name = combine_name_with_srcloc(name, code, 0); + } + } + return name; +} + Scheme_Object * scheme_make_closure_compilation(Scheme_Comp_Env *env, Scheme_Object *code, Scheme_Compile_Info *rec, int drec) @@ -931,21 +951,8 @@ scheme_make_closure_compilation(Scheme_Comp_Env *env, Scheme_Object *code, forms = scheme_datum_to_syntax(forms, code, code, 0, 0); forms = scheme_add_env_renames(forms, frame, env); - name = scheme_stx_property(code, scheme_inferred_name_symbol, NULL); - if (name && SCHEME_SYMBOLP(name)) { - name = combine_name_with_srcloc(name, code, 0); - data->name = name; - } else { - name = rec[drec].value_name; - if (!name || SCHEME_FALSEP(name)) { - name = scheme_source_to_name(code); - if (name) - name = combine_name_with_srcloc(name, code, 1); - } else { - name = combine_name_with_srcloc(name, code, 0); - } - data->name = name; - } + name = scheme_build_closure_name(code, rec, drec); + data->name = name; scheme_compile_rec_done_local(rec, drec); diff --git a/src/mzscheme/src/schpriv.h b/src/mzscheme/src/schpriv.h index 51987098fb..b51d1d42ad 100644 --- a/src/mzscheme/src/schpriv.h +++ b/src/mzscheme/src/schpriv.h @@ -1769,7 +1769,6 @@ Scheme_Object *scheme_make_closure_compilation(Scheme_Comp_Env *env, Scheme_Object *scheme_make_sequence_compilation(Scheme_Object *compiled_list, int strip_values); - Scheme_Object *scheme_resolve_closure_compilation(Scheme_Object *_data, Resolve_Info *info); Scheme_App_Rec *scheme_malloc_application(int n); @@ -1778,6 +1777,8 @@ void scheme_finish_application(Scheme_App_Rec *app); Scheme_Object *scheme_jit_expr(Scheme_Object *); Scheme_Object *scheme_jit_closure(Scheme_Object *, Scheme_Letrec *lr); +Scheme_Object *scheme_build_closure_name(Scheme_Object *code, Scheme_Compile_Info *rec, int drec); + #define SCHEME_SYNTAX(obj) SCHEME_PTR1_VAL(obj) #define SCHEME_SYNTAX_EXP(obj) SCHEME_PTR2_VAL(obj) diff --git a/src/mzscheme/src/syntax.c b/src/mzscheme/src/syntax.c index 3a1b8f4ae2..36e4c0f8d2 100644 --- a/src/mzscheme/src/syntax.c +++ b/src/mzscheme/src/syntax.c @@ -1612,7 +1612,7 @@ static Scheme_Object *case_lambda_jit(Scheme_Object *expr) if (!seqin->native_code) { Scheme_Case_Lambda *seqout; Scheme_Native_Closure_Data *ndata; - Scheme_Object *val; + Scheme_Object *val, *name; int i, cnt, size, all_closed = 1; cnt = seqin->count; @@ -1622,6 +1622,10 @@ static Scheme_Object *case_lambda_jit(Scheme_Object *expr) seqout = (Scheme_Case_Lambda *)scheme_malloc_tagged(size); memcpy(seqout, seqin, size); + name = seqin->name; + if (SCHEME_BOXP(name)) + name = SCHEME_BOX_VAL(name); + for (i = 0; i < cnt; i++) { val = seqout->array[i]; if (SCHEME_PROCP(val)) { @@ -1629,6 +1633,7 @@ static Scheme_Object *case_lambda_jit(Scheme_Object *expr) val = (Scheme_Object *)((Scheme_Closure *)val)->code; seqout->array[i] = val; } + ((Scheme_Closure_Data *)val)->name = name; if (((Scheme_Closure_Data *)val)->closure_size) all_closed = 0; } @@ -1775,9 +1780,7 @@ case_lambda_syntax (Scheme_Object *form, Scheme_Comp_Env *env, form = SCHEME_STX_CDR(form); - name = rec[drec].value_name; - if (!name || SCHEME_FALSEP(name)) - name = scheme_source_to_name(orig_form); + name = scheme_build_closure_name(orig_form, rec, drec); if (SCHEME_STX_NULLP(form)) { /* Case where there are no cases... */