From 8dbf325b45f3b29417a722e65a4e685538f6a2db Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 13 Mar 2009 09:10:07 +0000 Subject: * vm_eval.c (rb_throw_obj): inverted call flow. [ruby-core:22872] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@22927 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- vm_eval.c | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) (limited to 'vm_eval.c') diff --git a/vm_eval.c b/vm_eval.c index 0780f0928..4679fe65f 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -1127,8 +1127,6 @@ rb_mod_module_exec(int argc, VALUE *argv, VALUE mod) 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 @@ static VALUE 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,29 +1170,12 @@ rb_f_throw(int argc, VALUE *argv) 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); -} - -void -rb_throw_obj(VALUE tag, VALUE val) -{ - VALUE argv[2]; - - argv[0] = tag; - argv[1] = val; - rb_f_throw(2, argv); + rb_throw_obj(ID2SYM(rb_intern(tag)), val); } /* -- cgit