ruby-changes:62022
From: =E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3 <ko1@a...>
Date: Mon, 29 Jun 2020 11:07:44 +0900 (JST)
Subject: [ruby-changes:62022] 06ed9a7a04 (master): rb_convert_to_integer: do not goto into a branch
https://git.ruby-lang.org/ruby.git/commit/?id=06ed9a7a04 From 06ed9a7a045ab4a1e2e98910b06b988e6434fc44 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: Tue, 16 Jun 2020 10:56:56 +0900 Subject: rb_convert_to_integer: 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/object.c b/object.c index c0481d7..04a41cd 100644 --- a/object.c +++ b/object.c @@ -3362,33 +3362,35 @@ rb_convert_to_integer(VALUE val, int base, int raise_exception) https://github.com/ruby/ruby/blob/trunk/object.c#L3362 { VALUE tmp; + if (base) { + tmp = rb_check_string_type(val); + + if (! NIL_P(tmp)) { + val = tmp; + } + else if (! raise_exception) { + return Qnil; + } + else { + rb_raise(rb_eArgError, "base specified for non string value"); + } + } if (RB_FLOAT_TYPE_P(val)) { - double f; - if (base != 0) goto arg_error; - f = RFLOAT_VALUE(val); + double f = RFLOAT_VALUE(val); if (!raise_exception && !isfinite(f)) return Qnil; if (FIXABLE(f)) return LONG2FIX((long)f); return rb_dbl2big(f); } else if (RB_INTEGER_TYPE_P(val)) { - if (base != 0) goto arg_error; return val; } else if (RB_TYPE_P(val, T_STRING)) { return rb_str_convert_to_inum(val, base, TRUE, raise_exception); } else if (NIL_P(val)) { - if (base != 0) goto arg_error; if (!raise_exception) return Qnil; rb_raise(rb_eTypeError, "can't convert nil into Integer"); } - if (base != 0) { - tmp = rb_check_string_type(val); - if (!NIL_P(tmp)) return rb_str_convert_to_inum(tmp, base, TRUE, raise_exception); - arg_error: - if (!raise_exception) return Qnil; - rb_raise(rb_eArgError, "base specified for non string value"); - } tmp = rb_protect(rb_check_to_int, val, NULL); if (RB_INTEGER_TYPE_P(tmp)) return tmp; -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/