1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* 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
This commit is contained in:
matz 2007-09-01 14:46:00 +00:00
parent 6c7466e82a
commit 87fe4d4913
2 changed files with 7 additions and 2 deletions

View file

@ -1,3 +1,8 @@
Sat Sep 1 23:44:26 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
* eval_jump.ci (rb_f_throw): wrap tag and TAG_THROW in a NODE_MEMO
node to make throw instruction to work well.
Sat Sep 1 20:56:07 2007 Tanaka Akira <akr@fsij.org> Sat Sep 1 20:56:07 2007 Tanaka Akira <akr@fsij.org>
* include/ruby/ruby.h (struct RBignum): embed digits in RBignum for * include/ruby/ruby.h (struct RBignum): embed digits in RBignum for

View file

@ -39,7 +39,7 @@ rb_f_throw(int argc, VALUE *argv)
rb_raise(rb_eArgError, "uncaught throw %s", RSTRING_PTR(desc)); rb_raise(rb_eArgError, "uncaught throw %s", RSTRING_PTR(desc));
} }
rb_trap_restore_mask(); rb_trap_restore_mask();
th->errinfo = tag; th->errinfo = (VALUE)rb_node_newnode(NODE_MEMO, tag, 0, TAG_THROW);
JUMP_TAG(TAG_THROW); JUMP_TAG(TAG_THROW);
#ifndef __GNUC__ #ifndef __GNUC__
@ -117,7 +117,7 @@ rb_f_catch(int argc, VALUE *argv)
if ((state = EXEC_TAG()) == 0) { if ((state = EXEC_TAG()) == 0) {
val = rb_yield_0(1, &tag); 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; val = th->tag->retval;
th->errinfo = Qnil; th->errinfo = Qnil;
state = 0; state = 0;