aboutsummaryrefslogtreecommitdiffstats
path: root/eval_jump.ci
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-09-01 14:46:00 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-09-01 14:46:00 +0000
commit87fe4d49139524fddd58c8119cf356308a081813 (patch)
treef40380c42d5697df86d2b9c1159ec0475fbca552 /eval_jump.ci
parent6c7466e82a0e81db338f7a75fd584d80f9f82a56 (diff)
downloadruby-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.ci4
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;