summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorksss <[email protected]>2017-05-21 10:30:27 +0900
committerksss <[email protected]>2017-05-21 10:30:27 +0900
commit98f9c33fe07d098a1e06e0ea9a59324cf071a2d3 (patch)
tree607d7095cb1de58ba59717da80602de102797d88
parent78add728126cbe03b9048e57f897a7134508af5d (diff)
downloadmruby-98f9c33fe07d098a1e06e0ea9a59324cf071a2d3.tar.gz
mruby-98f9c33fe07d098a1e06e0ea9a59324cf071a2d3.zip
String#concat: Try to convert when not string
-rw-r--r--mrbgems/mruby-string-ext/src/string.c9
-rw-r--r--mrbgems/mruby-string-ext/test/string.rb16
2 files changed, 18 insertions, 7 deletions
diff --git a/mrbgems/mruby-string-ext/src/string.c b/mrbgems/mruby-string-ext/src/string.c
index 4c22f40c7..9dc1aeafc 100644
--- a/mrbgems/mruby-string-ext/src/string.c
+++ b/mrbgems/mruby-string-ext/src/string.c
@@ -134,6 +134,8 @@ mrb_str_swapcase(mrb_state *mrb, mrb_value self)
return str;
}
+static mrb_value mrb_fixnum_chr(mrb_state *mrb, mrb_value num);
+
/*
* call-seq:
* str << integer -> str
@@ -153,7 +155,12 @@ static mrb_value
mrb_str_concat2(mrb_state *mrb, mrb_value self)
{
mrb_value str;
- mrb_get_args(mrb, "S", &str);
+
+ mrb_get_args(mrb, "o", &str);
+ if (mrb_fixnum_p(str))
+ str = mrb_fixnum_chr(mrb, str);
+ else
+ str = mrb_string_type(mrb, str);
mrb_str_concat(mrb, self, str);
return self;
}
diff --git a/mrbgems/mruby-string-ext/test/string.rb b/mrbgems/mruby-string-ext/test/string.rb
index 24bc859d8..da39bd8e9 100644
--- a/mrbgems/mruby-string-ext/test/string.rb
+++ b/mrbgems/mruby-string-ext/test/string.rb
@@ -122,12 +122,16 @@ assert('String#swapcase!') do
end
assert('String#concat') do
- s = "Hello "
- s.concat "World!"
- t = "Hello "
- t << "World!"
- assert_equal "Hello World!", t
- assert_equal "Hello World!", s
+ assert_equal "Hello World!", "Hello " << "World" << 33
+ assert_equal "Hello World!", "Hello ".concat("World").concat(33)
+
+ o = Object.new
+ def o.to_str
+ "to_str"
+ end
+ assert_equal "hi to_str", "hi " << o
+
+ assert_raise(TypeError) { "".concat(Object.new) }
end
assert('String#casecmp') do