ruby-changes:11314
From: nobu <ko1@a...>
Date: Fri, 13 Mar 2009 18:10:23 +0900 (JST)
Subject: [ruby-changes:11314] Ruby:r22927 (trunk): * vm_eval.c (rb_throw_obj): inverted call flow.
nobu 2009-03-13 18:10:07 +0900 (Fri, 13 Mar 2009) New Revision: 22927 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=22927 Log: * vm_eval.c (rb_throw_obj): inverted call flow. [ruby-core:22872] Modified files: trunk/ChangeLog trunk/vm_eval.c Index: ChangeLog =================================================================== --- ChangeLog (revision 22926) +++ ChangeLog (revision 22927) @@ -1,3 +1,7 @@ +Fri Mar 13 18:10:06 2009 Nobuyoshi Nakada <nobu@r...> + + * vm_eval.c (rb_throw_obj): inverted call flow. [ruby-core:22872] + Fri Mar 13 17:04:09 2009 Nobuyoshi Nakada <nobu@r...> * include/ruby/ruby.h (bool): not define to get rid of conflic Index: vm_eval.c =================================================================== --- vm_eval.c (revision 22926) +++ vm_eval.c (revision 22927) @@ -1127,8 +1127,6 @@ return yield_under(mod, mod, rb_ary_new4(argc, argv)); } -NORETURN(static VALUE rb_f_throw _((int, VALUE *))); - /* * call-seq: * throw(symbol [, obj]) @@ -1145,10 +1143,18 @@ rb_f_throw(int argc, VALUE *argv) { VALUE tag, value; + + rb_scan_args(argc, argv, "11", &tag, &value); + rb_throw_obj(tag, value); + return Qnil; /* not reached */ +} + +void +rb_throw_obj(VALUE tag, VALUE value) +{ rb_thread_t *th = GET_THREAD(); struct rb_vm_tag *tt = th->tag; - rb_scan_args(argc, argv, "11", &tag, &value); while (tt) { if (tt->tag == tag) { tt->retval = value; @@ -1164,31 +1170,14 @@ th->errinfo = NEW_THROW_OBJECT(tag, 0, TAG_THROW); JUMP_TAG(TAG_THROW); -#ifndef __GNUC__ - return Qnil; /* not reached */ -#endif } void rb_throw(const char *tag, VALUE val) { - VALUE argv[2]; - - argv[0] = ID2SYM(rb_intern(tag)); - argv[1] = val; - rb_f_throw(2, argv); + rb_throw_obj(ID2SYM(rb_intern(tag)), val); } -void -rb_throw_obj(VALUE tag, VALUE val) -{ - VALUE argv[2]; - - argv[0] = tag; - argv[1] = val; - rb_f_throw(2, argv); -} - /* * call-seq: * catch(symbol) {| | block } > obj -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/