summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorksss <[email protected]>2014-03-16 22:52:25 +0900
committerksss <[email protected]>2014-03-16 22:52:25 +0900
commite9f3dca0f44003e0fe787101d47cd816393e7767 (patch)
treefc41ee597a7735404f4449e704f3e603aa8857a5
parent18bebd3acdea1124b3d192ffc171eb6807d391cf (diff)
downloadmruby-e9f3dca0f44003e0fe787101d47cd816393e7767.tar.gz
mruby-e9f3dca0f44003e0fe787101d47cd816393e7767.zip
fix bug when `0 + other object`
-rw-r--r--src/numeric.c2
-rw-r--r--test/t/integer.rb3
2 files changed, 4 insertions, 1 deletions
diff --git a/src/numeric.c b/src/numeric.c
index 38a05ae92..0927abee2 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -1131,10 +1131,10 @@ mrb_fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y)
mrb_int a;
a = mrb_fixnum(x);
- if (a == 0) return y;
if (mrb_fixnum_p(y)) {
mrb_int b, c;
+ if (a == 0) return y;
b = mrb_fixnum(y);
c = a + b;
if (((a < 0) ^ (b < 0)) == 0 && (a < 0) != (c < 0)) {
diff --git a/test/t/integer.rb b/test/t/integer.rb
index 2bffce5a9..f7a9eb8dd 100644
--- a/test/t/integer.rb
+++ b/test/t/integer.rb
@@ -15,6 +15,9 @@ assert('Integer#+', '15.2.8.3.1') do
assert_equal 2, a
assert_equal 2.0, b
+
+ assert_raise(TypeError){ 0+nil }
+ assert_raise(TypeError){ 1+nil }
end
assert('Integer#-', '15.2.8.3.2') do