diff options
| author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-06-28 03:29:00 +0000 |
|---|---|---|
| committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-06-28 03:29:00 +0000 |
| commit | d93ca3c9623dcd95c3154b692fe4998b6c1ada90 (patch) | |
| tree | e3fcc29316c79f8df372319c472d4875271d0f8e /eval.c | |
| parent | 11e5165613a74fca9c761906303c245fb237f0d9 (diff) | |
| download | ruby-d93ca3c9623dcd95c3154b692fe4998b6c1ada90.tar.gz ruby-d93ca3c9623dcd95c3154b692fe4998b6c1ada90.tar.xz ruby-d93ca3c9623dcd95c3154b692fe4998b6c1ada90.zip | |
* configure.in (rb_cv_stack_grow_dir): check stack growing direction.
* eval.c (rb_thread_restore_context): prior configuration macro.
* gc.c (ruby_stack_length): always return the address of lower edge.
* gc.c (rb_gc_mark_locations): remove margin. [ruby-dev:20462]
* gc.c (rb_gc, Init_stack): prior configuration macro.
* gc.c (Init_stack): add safety margin.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@4012 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
| -rw-r--r-- | eval.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -8112,8 +8112,7 @@ rb_thread_save_context(th) len = ruby_stack_length(&pos); th->stk_len = 0; - th->stk_pos = (rb_gc_stack_start<pos)?rb_gc_stack_start - :rb_gc_stack_start - len; + th->stk_pos = pos; if (len > th->stk_max) { REALLOC_N(th->stk_ptr, VALUE, len); th->stk_max = len; @@ -8211,6 +8210,11 @@ rb_thread_restore_context(th, exit) if (!th->stk_ptr) rb_bug("unsaved context"); +#if STACK_GROW_DIRECTION < 0 + if (&v > th->stk_pos) stack_extend(th, exit); +#elif STACK_GROW_DIRECTION > 0 + if (&v < th->stk_pos + th->stk_len) stack_extend(th, exit); +#else if (&v < rb_gc_stack_start) { /* Stack grows downward */ if (&v > th->stk_pos) stack_extend(th, exit); @@ -8219,6 +8223,7 @@ rb_thread_restore_context(th, exit) /* Stack grows upward */ if (&v < th->stk_pos + th->stk_len) stack_extend(th, exit); } +#endif rb_trap_immediate = 0; /* inhibit interrupts from here */ ruby_frame = th->frame; |
