aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-10-27 00:12:33 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-10-27 00:12:33 +0000
commit04af7d260509b4bc00c24c78d02a8b60b3fcd829 (patch)
tree53603cd367b3610aa46f991b976f9dbadb8fe13b
parent3e635606e46aadaeed10d239dbee884a5bea92d1 (diff)
downloadruby-04af7d260509b4bc00c24c78d02a8b60b3fcd829.tar.gz
object.c: use converted string
* object.c (rb_convert_to_integer): should not drop the converted string. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56495 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--object.c3
-rw-r--r--test/ruby/test_integer.rb4
3 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 9e9bd56277..c03b6adcf6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu Oct 27 09:12:32 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (rb_convert_to_integer): should not drop the converted
+ string.
+
Wed Oct 26 17:09:59 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* include/ruby/ruby.h (rb_intern): use prefixed version macro
diff --git a/object.c b/object.c
index fb8cee4071..228b67e8f8 100644
--- a/object.c
+++ b/object.c
@@ -2699,7 +2699,6 @@ rb_convert_to_integer(VALUE val, int base)
return val;
case T_STRING:
- string_conv:
return rb_str_to_inum(val, base, TRUE);
case T_NIL:
@@ -2712,7 +2711,7 @@ rb_convert_to_integer(VALUE val, int base)
}
if (base != 0) {
tmp = rb_check_string_type(val);
- if (!NIL_P(tmp)) goto string_conv;
+ if (!NIL_P(tmp)) return rb_str_to_inum(tmp, base, TRUE);
arg_error:
rb_raise(rb_eArgError, "base specified for non string value");
}
diff --git a/test/ruby/test_integer.rb b/test/ruby/test_integer.rb
index 6a9001c698..32c3511576 100644
--- a/test/ruby/test_integer.rb
+++ b/test/ruby/test_integer.rb
@@ -100,6 +100,10 @@ class TestInteger < Test::Unit::TestCase
assert_raise(Encoding::CompatibilityError, bug6192) {Integer("0".encode("iso-2022-jp"))}
assert_raise_with_message(ArgumentError, /\u{1f4a1}/) {Integer("\u{1f4a1}")}
+
+ obj = Struct.new(:s).new(%w[42 not-an-integer])
+ def obj.to_str; s.shift; end
+ assert_equal(42, Integer(obj, 10))
end
def test_int_p