~ chicken-core (chicken-5) eb13513be6fe2a5b20ef1006708bdf4ed00af188
commit eb13513be6fe2a5b20ef1006708bdf4ed00af188 Author: Peter Bex <peter@more-magic.net> AuthorDate: Sat Aug 22 18:15:00 2015 +0200 Commit: Peter Bex <peter@more-magic.net> CommitDate: Sat Aug 22 19:37:26 2015 +0200 restore temp-stack after use, and use av where appropriate Conflicts: runtime.c diff --git a/runtime.c b/runtime.c index ebccddc7..449ad24d 100644 --- a/runtime.c +++ b/runtime.c @@ -1498,8 +1498,12 @@ C_word CHICKEN_run(void *toplevel) serious_signal_occurred = 0; - if(!return_to_host) - ((C_proc)C_restart_trampoline)(C_restart_c, C_temporary_stack); + if(!return_to_host) { + C_word *p = C_temporary_stack; + + C_temporary_stack = C_temporary_stack_bottom; + ((C_proc)C_restart_trampoline)(C_restart_c, p); + } chicken_is_running = 0; return C_restore; @@ -9835,7 +9839,7 @@ void C_ccall C_gc(C_word c, C_word *av) k = av[ 1 ]; int f; C_word - arg, + arg, *p, size = 0; if(c == 3) { @@ -9846,6 +9850,7 @@ void C_ccall C_gc(C_word c, C_word *av) else f = 1; C_save(k); + p = C_temporary_stack; if(c == 3) { if((arg & C_FIXNUM_BIT) != 0) size = C_unfix(arg); @@ -9854,7 +9859,8 @@ void C_ccall C_gc(C_word c, C_word *av) if(size && !C_heap_size_is_fixed) { C_rereclaim2(size, 0); - gc_2(0, NULL); + C_temporary_stack = C_temporary_stack_bottom; + gc_2(0, p); } else if(f) C_fromspace_top = C_fromspace_limit; @@ -9864,7 +9870,7 @@ void C_ccall C_gc(C_word c, C_word *av) void C_ccall gc_2(C_word c, C_word *av) { - C_word k = C_restore; + C_word k = av[ 0 ]; C_kontinue(k, C_fix((C_uword)C_fromspace_limit - (C_uword)C_fromspace_top)); } @@ -9922,7 +9928,7 @@ void C_ccall C_allocate_vector(C_word c, C_word *av) k = av[ 1 ], size, bvecf, init, align8, bytes, - n; + n, *p; if(c != 6) C_bad_argc(c, 6); @@ -9957,20 +9963,22 @@ void C_ccall C_allocate_vector(C_word c, C_word *av) } C_save(C_SCHEME_FALSE); - allocate_vector_2(0, NULL); + p = C_temporary_stack; + C_temporary_stack = C_temporary_stack_bottom; + allocate_vector_2(0, p); } void C_ccall allocate_vector_2(C_word c, C_word *av) { C_word - mode = C_restore, - bytes = C_unfix(C_restore), - align8 = C_restore, - bvecf = C_restore, - init = C_restore, - size = C_unfix(C_restore), - k = C_restore, + mode = av[ 0 ], + bytes = C_unfix(av[ 1 ]), + align8 = av[ 2 ], + bvecf = av[ 3 ], + init = av[ 4 ], + size = C_unfix(av[ 5 ]), + k = av[ 6 ], *v0, v; if(C_truep(mode)) { @@ -11344,7 +11352,8 @@ void C_ccall C_make_structure(C_word c, C_word *av) C_word /* closure = av[ 0 ] */ k = av[ 1 ], - type = av[ 2 ]; + type = av[ 2 ], + *p; int i; av += 2; @@ -11357,15 +11366,17 @@ void C_ccall C_make_structure(C_word c, C_word *av) if(!C_demand(c - 1)) C_reclaim((void *)make_structure_2, c); - make_structure_2(0, NULL); + p = C_temporary_stack; + C_temporary_stack = C_temporary_stack_bottom; + make_structure_2(0, p); } void C_ccall make_structure_2(C_word c, C_word *av) { C_word - k = C_restore, - type = C_restore, + k = av[ 0 ], + type = av[ 1 ], size = c - 2, *a = C_alloc(C_SIZEOF_STRUCTURE(size+1)), *s = a, @@ -11374,9 +11385,10 @@ void C_ccall make_structure_2(C_word c, C_word *av) *(s++) = C_STRUCTURE_TYPE | (size + 1); *(s++) = type; s += size; + av += 2; while(size--) - *(--s) = C_restore; + *(--s) = *(av++); C_kontinue(k, s0); } @@ -11434,20 +11446,23 @@ void C_ccall C_ensure_heap_reserve(C_word c, C_word *av) C_word /* closure = av[ 0 ] */ k = av[ 1 ], - n = av[ 2 ]; + n = av[ 2 ], + *p; C_save(k); if(!C_demand(C_bytestowords(C_unfix(n)))) C_reclaim((void *)generic_trampoline, c); - generic_trampoline(0, NULL); + p = C_temporary_stack; + C_temporary_stack = C_temporary_stack_bottom; + generic_trampoline(0, p); } void C_ccall generic_trampoline(C_word c, C_word *av) { - C_word k = C_restore; + C_word k = av[ 0 ]; C_kontinue(k, C_SCHEME_UNDEFINED); } @@ -11825,9 +11840,9 @@ void C_ccall dload_2(C_word c, C_word *av0) { void *handle, *p; C_word - entry = C_restore, - name = C_restore, - k = C_restore, + entry = av0[ 0 ], + name = av0[ 1 ], + k = av0[ 2 ],, av[ 2 ]; C_char *mname = (C_char *)C_data_pointer(name); @@ -11877,9 +11892,9 @@ void C_ccall dload_2(C_word c, C_word *av0) { void *handle, *p, *p2; C_word - entry = C_restore, - name = C_restore, - k = C_restore, + entry = av0[ 0 ], + name = av0[ 1 ], + k = av0[ 2 ], av[ 2 ]; C_char *topname = (C_char *)C_data_pointer(entry); C_char *mname = (C_char *)C_data_pointer(name); @@ -11931,9 +11946,9 @@ void C_ccall dload_2(C_word c, C_word *av0) HINSTANCE handle; FARPROC p = NULL, p2; C_word - entry = C_restore, - name = C_restore, - k = C_restore, + entry = av0[ 0 ], + name = av0[ 1 ], + k = av0[ 2 ], av[ 2 ]; C_char *topname = (C_char *)C_data_pointer(entry); C_char *mname = (C_char *)C_data_pointer(name); @@ -12008,7 +12023,7 @@ void C_ccall C_become(C_word c, C_word *av) void C_ccall become_2(C_word c, C_word *av) { - C_word k = C_restore; + C_word k = av[ 0 ]; *forwarding_table = 0; C_kontinue(k, C_SCHEME_UNDEFINED); @@ -12341,7 +12356,8 @@ void C_ccall C_copy_closure(C_word c, C_word *av) C_word /* closure = av[ 0 ] */ k = av[ 1 ], - proc = av[ 2 ]; + proc = av[ 2 ], + *p; int n = C_header_size(proc); if(!C_demand(n + 1)) @@ -12349,7 +12365,9 @@ void C_ccall C_copy_closure(C_word c, C_word *av) else { C_save(proc); C_save(k); - copy_closure_2(0, NULL); + p = C_temporary_stack; + C_temporary_stack = C_temporary_stack_bottom; + copy_closure_2(0, p); } } @@ -12357,8 +12375,8 @@ void C_ccall C_copy_closure(C_word c, C_word *av) static void C_ccall copy_closure_2(C_word c, C_word *av) { C_word - k = C_restore, - proc = C_restore; + k = av[ 0 ], + proc = av[ 1 ]; int cells = C_header_size(proc); C_word *ptr = C_alloc(C_SIZEOF_CLOSURE(cells)), @@ -12982,7 +13000,7 @@ hdump_count(C_word key, int n, int t) static void C_ccall dump_heap_state_2(C_word c, C_word *av) { - C_word k = C_restore; + C_word k = av[ 0 ]; HDUMP_BUCKET *b, *b2, **bp; int n, bytes; C_byte *scan; @@ -13106,10 +13124,11 @@ static void C_ccall dump_heap_state_2(C_word c, C_word *av) static void C_ccall filter_heap_objects_2(C_word c, C_word *av) { - void *func = C_pointer_address(C_restore); - C_word userarg = C_restore; - C_word vector = C_restore; - C_word k = C_restore; + void *func = C_pointer_address(av[ 0 ]); + C_word + userarg = av[ 1 ], + vector = av[ 2 ], + k = av[ 3 ]; int n, bytes; C_byte *scan; C_SCHEME_BLOCK *sbp;Trap