diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-09-01 14:46:00 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-09-01 14:46:00 +0000 |
commit | 87fe4d49139524fddd58c8119cf356308a081813 (patch) | |
tree | f40380c42d5697df86d2b9c1159ec0475fbca552 /eval_jump.ci | |
parent | 6c7466e82a0e81db338f7a75fd584d80f9f82a56 (diff) | |
download | ruby-87fe4d49139524fddd58c8119cf356308a081813.tar.gz |
* eval_jump.ci (rb_f_throw): wrap tag and TAG_THROW in a NODE_MEMO
node to make throw instruction to work well.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13333 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval_jump.ci')
-rw-r--r-- | eval_jump.ci | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/eval_jump.ci b/eval_jump.ci index a637f97227..1767515e6f 100644 --- a/eval_jump.ci +++ b/eval_jump.ci @@ -39,7 +39,7 @@ rb_f_throw(int argc, VALUE *argv) rb_raise(rb_eArgError, "uncaught throw %s", RSTRING_PTR(desc)); } rb_trap_restore_mask(); - th->errinfo = tag; + th->errinfo = (VALUE)rb_node_newnode(NODE_MEMO, tag, 0, TAG_THROW); JUMP_TAG(TAG_THROW); #ifndef __GNUC__ @@ -117,7 +117,7 @@ rb_f_catch(int argc, VALUE *argv) if ((state = EXEC_TAG()) == 0) { val = rb_yield_0(1, &tag); } - else if (state == TAG_THROW && th->errinfo == tag) { + else if (state == TAG_THROW && RNODE(th->errinfo)->u1.value == tag) { val = th->tag->retval; th->errinfo = Qnil; state = 0; |