ruby-changes:62006
From: =E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3 <ko1@a...>
Date: Mon, 29 Jun 2020 11:07:17 +0900 (JST)
Subject: [ruby-changes:62006] 4606ec4925 (master): make_exception: do not goto into a branch
https://git.ruby-lang.org/ruby.git/commit/?id=4606ec4925 From 4606ec4925756d9e7b7c9648787d614be3102ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3?= <shyouhei@r...> Date: Mon, 15 Jun 2020 12:38:19 +0900 Subject: make_exception: do not goto into a branch I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor. diff --git a/eval.c b/eval.c index ac442dd..e4d6699 100644 --- a/eval.c +++ b/eval.c @@ -806,44 +806,37 @@ static VALUE https://github.com/ruby/ruby/blob/trunk/eval.c#L806 make_exception(int argc, const VALUE *argv, int isstr) { VALUE mesg, exc; - int n; mesg = Qnil; switch (argc) { case 0: - break; + return Qnil; case 1: exc = argv[0]; - if (NIL_P(exc)) - break; - if (isstr) { + if (isstr &&! NIL_P(exc)) { mesg = rb_check_string_type(exc); if (!NIL_P(mesg)) { mesg = rb_exc_new3(rb_eRuntimeError, mesg); - break; } } - n = 0; - goto exception_call; case 2: case 3: - exc = argv[0]; - n = 1; - exception_call: - mesg = rb_check_funcall(exc, idException, n, argv+1); - if (mesg == Qundef) { - rb_raise(rb_eTypeError, "exception class/object expected"); - } break; default: rb_error_arity(argc, 0, 3); } - if (argc > 0) { - if (!rb_obj_is_kind_of(mesg, rb_eException)) - rb_raise(rb_eTypeError, "exception object expected"); - if (argc > 2) - set_backtrace(mesg, argv[2]); + if (NIL_P(mesg)) { + mesg = rb_check_funcall(argv[0], idException, argc != 1, &argv[1]); + } + if (mesg == Qundef) { + rb_raise(rb_eTypeError, "exception class/object expected"); + } + if (!rb_obj_is_kind_of(mesg, rb_eException)) { + rb_raise(rb_eTypeError, "exception object expected"); + } + if (argc == 3) { + set_backtrace(mesg, argv[2]); } return mesg; -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/