diff options
| author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-08-15 09:04:32 +0000 |
|---|---|---|
| committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-08-15 09:04:32 +0000 |
| commit | 29c892f131f77a4c3b230c118962d00a0e5a443f (patch) | |
| tree | 7c3144aaa982b4f882818211b22f7a1fd4b27ba8 /eval.c | |
| parent | cf46a5142084f7381836cf99533d5245a334be43 (diff) | |
| download | ruby-29c892f131f77a4c3b230c118962d00a0e5a443f.tar.gz ruby-29c892f131f77a4c3b230c118962d00a0e5a443f.tar.xz ruby-29c892f131f77a4c3b230c118962d00a0e5a443f.zip | |
matz
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@894 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
| -rw-r--r-- | eval.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -505,6 +505,7 @@ static struct SCOPE *top_scope; _frame.cbase = ruby_frame->cbase; \ _frame.argc = 0; \ _frame.argv = 0; \ + _frame.flags = FRAME_ALLOCA; \ ruby_frame = &_frame; \ #define POP_FRAME() \ @@ -5682,7 +5683,7 @@ blk_free(data) frame = data->frame.prev; while (frame) { - if (frame->argc > 0) + if (frame->argc > 0 && (frame->flags & FRAME_MALLOC)) free(frame->argv); tmp = frame; frame = frame->prev; @@ -5728,6 +5729,7 @@ frame_dup(frame) argv = ALLOC_N(VALUE, frame->argc); MEMCPY(argv, frame->argv, VALUE, frame->argc); frame->argv = argv; + frame->flags = FRAME_MALLOC; } frame->tmp = 0; /* should not preserve tmp */ if (!frame->prev) break; @@ -7781,7 +7783,7 @@ rb_thread_status(thread) rb_thread_t th = rb_thread_check(thread); if (rb_thread_dead(th)) { - if (NIL_P(th->errinfo) && (th->flags & THREAD_RAISED)) + if (!NIL_P(th->errinfo) && (th->flags & THREAD_RAISED)) return Qnil; return Qfalse; } |
