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:
parent
6c7466e82a
commit
87fe4d4913
2 changed files with 7 additions and 2 deletions
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue