diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-11-26 09:07:26 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-11-26 09:07:26 +0000 |
commit | 806ff7412735cc554d9fd79e550466e7ba9d0f2a (patch) | |
tree | c8afffebb66d490bb1fd6e031cec6edb2fa487b9 /gc.c | |
parent | 1ad0350eed7825686e32e1fd6d058c5c5f7ca213 (diff) | |
download | ruby-806ff7412735cc554d9fd79e550466e7ba9d0f2a.tar.gz ruby-806ff7412735cc554d9fd79e550466e7ba9d0f2a.tar.xz ruby-806ff7412735cc554d9fd79e550466e7ba9d0f2a.zip |
mark_end_proc
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@571 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 17 |
1 files changed, 7 insertions, 10 deletions
@@ -893,6 +893,10 @@ rb_gc() jmp_buf save_regs_gc_mark; #ifdef C_ALLOCA VALUE stack_end; + alloca(0); +# define STACK_END (&stack_end) +#else +# define STACK_END alloca(1) #endif alloc_objects = 0; @@ -901,10 +905,6 @@ rb_gc() if (during_gc) return; during_gc++; -#ifdef C_ALLOCA - alloca(0); -#endif - /* mark frame stack */ for (frame = ruby_frame; frame; frame = frame->prev) { rb_gc_mark_frame(frame); @@ -924,18 +924,14 @@ rb_gc() /* This assumes that all registers are saved into the jmp_buf */ setjmp(save_regs_gc_mark); mark_locations_array((VALUE*)save_regs_gc_mark, sizeof(save_regs_gc_mark) / sizeof(VALUE *)); -#ifdef C_ALLOCA - rb_gc_mark_locations(rb_gc_stack_start, (VALUE*)&stack_end); -#else - rb_gc_mark_locations(rb_gc_stack_start, (VALUE*)alloca(1)); -#endif + rb_gc_mark_locations(rb_gc_stack_start, (VALUE*)STACK_END); #if defined(THINK_C) || defined(__human68k__) #ifndef __human68k__ mark_locations_array((VALUE*)((char*)save_regs_gc_mark+2), sizeof(save_regs_gc_mark) / sizeof(VALUE *)); #endif rb_gc_mark_locations((VALUE*)((char*)rb_gc_stack_start + 2), - (VALUE*)((char*)&stack_end + 2)); + (VALUE*)((char*)STACK_END + 2)); #endif rb_gc_mark_threads(); @@ -943,6 +939,7 @@ rb_gc() for (list = Global_List; list; list = list->next) { rb_gc_mark(*list->varptr); } + rb_mark_end_proc(); rb_gc_mark_global_tbl(); rb_mark_tbl(rb_class_tbl); |