diff options
| author | ksss <[email protected]> | 2017-05-21 10:30:27 +0900 |
|---|---|---|
| committer | ksss <[email protected]> | 2017-05-21 10:30:27 +0900 |
| commit | 98f9c33fe07d098a1e06e0ea9a59324cf071a2d3 (patch) | |
| tree | 607d7095cb1de58ba59717da80602de102797d88 | |
| parent | 78add728126cbe03b9048e57f897a7134508af5d (diff) | |
| download | mruby-98f9c33fe07d098a1e06e0ea9a59324cf071a2d3.tar.gz mruby-98f9c33fe07d098a1e06e0ea9a59324cf071a2d3.zip | |
String#concat: Try to convert when not string
| -rw-r--r-- | mrbgems/mruby-string-ext/src/string.c | 9 | ||||
| -rw-r--r-- | mrbgems/mruby-string-ext/test/string.rb | 16 |
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 |
