ruby-changes:1842
From: ko1@a...
Date: 1 Sep 2007 23:46:16 +0900
Subject: [ruby-changes:1842] matz - Ruby:r13333 (trunk): * eval_jump.ci (rb_f_throw): wrap tag and TAG_THROW in a NODE_MEMO
matz 2007-09-01 23:46:00 +0900 (Sat, 01 Sep 2007)
New Revision: 13333
Modified files:
trunk/ChangeLog
trunk/eval_jump.ci
Log:
* eval_jump.ci (rb_f_throw): wrap tag and TAG_THROW in a NODE_MEMO
node to make throw instruction to work well.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13333&r2=13332
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/eval_jump.ci?r1=13333&r2=13332
Index: ChangeLog
===================================================================
--- ChangeLog (revision 13332)
+++ ChangeLog (revision 13333)
@@ -1,3 +1,8 @@
+Sat Sep 1 23:44:26 2007 Yukihiro Matsumoto <matz@r...>
+
+ * 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@f...>
* include/ruby/ruby.h (struct RBignum): embed digits in RBignum for
Index: eval_jump.ci
===================================================================
--- eval_jump.ci (revision 13332)
+++ eval_jump.ci (revision 13333)
@@ -39,7 +39,7 @@
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 @@
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;
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml