letrec-created closures need to be initially zeroed, unless it's the last closure for the letrec
svn: r5459
This commit is contained in:
parent
2b10f81125
commit
f4c8a45e2a
|
@ -2033,7 +2033,7 @@ void GC_mark(const void *const_p)
|
|||
btc_mark is right */
|
||||
set_btc_mark(NUM(page) + HEADER_SIZEB);
|
||||
}
|
||||
|
||||
|
||||
page->marked_on = 1;
|
||||
record_backtrace(page, PTR(NUM(page) + HEADER_SIZEB));
|
||||
GCDEBUG((DEBUGOUTF, "Marking %p on big page %p\n", p, page));
|
||||
|
|
|
@ -3446,7 +3446,8 @@ static void ensure_closure_native(Scheme_Closure_Data *data,
|
|||
}
|
||||
|
||||
static int generate_closure(Scheme_Closure_Data *data,
|
||||
mz_jit_state *jitter)
|
||||
mz_jit_state *jitter,
|
||||
int immediately_filled)
|
||||
{
|
||||
Scheme_Native_Closure_Data *code;
|
||||
int retptr;
|
||||
|
@ -3465,7 +3466,11 @@ static int generate_closure(Scheme_Closure_Data *data,
|
|||
jit_movi_l(JIT_R0, sz);
|
||||
mz_prepare(1);
|
||||
jit_pusharg_l(JIT_R0);
|
||||
(void)mz_finish(GC_malloc_one_small_dirty_tagged);
|
||||
if (immediately_filled) {
|
||||
(void)mz_finish(GC_malloc_one_small_dirty_tagged);
|
||||
} else {
|
||||
(void)mz_finish(GC_malloc_one_small_tagged);
|
||||
}
|
||||
jit_retval(JIT_R0);
|
||||
retptr = mz_retain(code);
|
||||
init_word = *(long *)&example_so;
|
||||
|
@ -3593,7 +3598,7 @@ static int generate_case_closure(Scheme_Object *obj, mz_jit_state *jitter)
|
|||
o = (Scheme_Object *)((Scheme_Closure *)o)->code;
|
||||
data = (Scheme_Closure_Data *)o;
|
||||
mz_pushr_p(JIT_R1);
|
||||
generate_closure(data, jitter);
|
||||
generate_closure(data, jitter, 1);
|
||||
CHECK_LIMIT();
|
||||
generate_closure_fill(data, jitter);
|
||||
CHECK_LIMIT();
|
||||
|
@ -4281,7 +4286,7 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m
|
|||
LOG_IT(("lambda\n"));
|
||||
|
||||
/* Allocate closure */
|
||||
generate_closure(data, jitter);
|
||||
generate_closure(data, jitter, 1);
|
||||
CHECK_LIMIT();
|
||||
|
||||
generate_closure_fill(data, jitter);
|
||||
|
@ -4417,7 +4422,7 @@ static int generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int m
|
|||
/* Create unfinished closures */
|
||||
for (i = 0; i < l->count; i++) {
|
||||
((Scheme_Closure_Data *)l->procs[i])->context = (Scheme_Object *)l;
|
||||
generate_closure((Scheme_Closure_Data *)l->procs[i], jitter);
|
||||
generate_closure((Scheme_Closure_Data *)l->procs[i], jitter, i + 1 == l->count);
|
||||
CHECK_LIMIT();
|
||||
jit_stxi_p(WORDS_TO_BYTES(i), JIT_RUNSTACK, JIT_R0);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user