Ticket #742: warning-from-jw-possibly-broken-savemstack.diff
File warning-from-jw-possibly-broken-savemstack.diff, 2.5 KB (added by , 12 years ago) |
---|
-
runtime.c
old new 1792 1792 1793 1793 void C_fcall C_callback_adjust_stack(C_word *a, int size) 1794 1794 { 1795 if(!chicken_is_running && !C_i n_stackp((C_word)a)) {1795 if(!chicken_is_running && !C_i_in_stackp((C_word)a)) { 1796 1796 if(debug_mode) 1797 1797 C_dbg(C_text("debug"), 1798 1798 C_text("callback invoked in lower stack region - adjusting limits:\n" … … 1966 1966 1967 1967 key = hash_string(len, str, stable->size); 1968 1968 1969 if(C_truep(s = lookup(key, len, str, stable))) { 1970 if(C_in_stackp(s)) C_mutate(slot, s); 1971 1972 return s; 1973 } 1969 if(C_truep(s = lookup(key, len, str, stable))) 1970 return C_mutate(slot, s); 1974 1971 1975 1972 s = C_static_string(C_heaptop, len, str); 1976 1973 return add_symbol(C_heaptop, key, s, stable); … … 2109 2106 } 2110 2107 2111 2108 2112 C_ regparm int C_in_stackp(C_word x)2109 C_inline C_regparm int C_i_in_stackp(C_word x) 2113 2110 { 2114 2111 C_word *ptr = (C_word *)(C_uword)x; 2115 2112 … … 2120 2117 #endif 2121 2118 } 2122 2119 2120 C_regparm int C_in_stackp(C_word x) 2121 { 2122 return C_i_in_stackp(x); 2123 } 2123 2124 2124 2125 C_regparm int C_fcall C_in_heapp(C_word x) 2125 2126 { … … 2539 2540 { 2540 2541 unsigned int mssize, newmssize, bytes; 2541 2542 2542 if(!C_immediatep(val) ) {2543 if(!C_immediatep(val) && C_i_in_stackp(val)) { 2543 2544 #ifdef C_GC_HOOKS 2544 2545 if(C_gc_mutation_hook != NULL && C_gc_mutation_hook(slot, val)) return val; 2545 2546 #endif … … 3362 3363 if(is_fptr(h)) /* forwarded? update l-table entry */ 3363 3364 loc = locative_table[ i ] = fptr_to_ptr(h); 3364 3365 /* otherwise it must have been GC'd (since this is a minor one) */ 3365 else if(C_i n_stackp(loc)) {3366 else if(C_i_in_stackp(loc)) { 3366 3367 locative_table[ i ] = C_SCHEME_UNDEFINED; 3367 3368 C_set_block_item(loc, 0, 0); 3368 3369 ++invalidated; … … 3379 3380 C_set_block_item(loc, 0, (C_uword)fptr_to_ptr(h) + offset); 3380 3381 hi = i + 1; 3381 3382 } 3382 else if(C_i n_stackp(obj)) { /* pointed-at object GC'd, locative is invalid */3383 else if(C_i_in_stackp(obj)) { /* pointed-at object GC'd, locative is invalid */ 3383 3384 locative_table[ i ] = C_SCHEME_UNDEFINED; 3384 3385 C_set_block_item(loc, 0, 0); 3385 3386 } … … 7985 7986 flist->next = finalizer_list; 7986 7987 finalizer_list = flist; 7987 7988 7988 if(C_i n_stackp(x)) C_mutate(&flist->item, x);7989 if(C_i_in_stackp(x)) C_mutate(&flist->item, x); 7989 7990 else flist->item = x; 7990 7991 7991 if(C_i n_stackp(proc)) C_mutate(&flist->finalizer, proc);7992 if(C_i_in_stackp(proc)) C_mutate(&flist->finalizer, proc); 7992 7993 else flist->finalizer = proc; 7993 7994 7994 7995 ++live_finalizer_count;