diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-02-04 21:11:06 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2019-02-04 21:11:06 +0900 |
| commit | db2545cb3c61f55702be2abe8836b5190effa9c5 (patch) | |
| tree | 4b3cfd9dbed6bfb7eac0e92b524d5dd02cd284ab /mrbgems | |
| parent | 5fd9f68b2735d6c104c9945e374ff28309af7a39 (diff) | |
| parent | 69fd1a592560d321061790c94f93532db93dccb9 (diff) | |
| download | mruby-db2545cb3c61f55702be2abe8836b5190effa9c5.tar.gz mruby-db2545cb3c61f55702be2abe8836b5190effa9c5.zip | |
Merge pull request #4260 from shuujii/fix-symbol-size-with-mrb_utf8_string
Fix `Symbol#size` for multi-byte characters with `MRB_UTF8_STRING`
Diffstat (limited to 'mrbgems')
| -rw-r--r-- | mrbgems/mruby-symbol-ext/src/symbol.c | 7 | ||||
| -rw-r--r-- | mrbgems/mruby-symbol-ext/test/symbol.rb | 15 |
2 files changed, 19 insertions, 3 deletions
diff --git a/mrbgems/mruby-symbol-ext/src/symbol.c b/mrbgems/mruby-symbol-ext/src/symbol.c index a992dbfce..215226502 100644 --- a/mrbgems/mruby-symbol-ext/src/symbol.c +++ b/mrbgems/mruby-symbol-ext/src/symbol.c @@ -1,6 +1,7 @@ #include <mruby.h> #include <mruby/khash.h> #include <mruby/array.h> +#include <mruby/string.h> typedef struct symbol_name { size_t len; @@ -45,7 +46,13 @@ static mrb_value mrb_sym_length(mrb_state *mrb, mrb_value self) { mrb_int len; +#ifdef MRB_UTF8_STRING + mrb_int byte_len; + const char *name = mrb_sym2name_len(mrb, mrb_symbol(self), &byte_len); + len = mrb_utf8_len(name, byte_len); +#else mrb_sym2name_len(mrb, mrb_symbol(self), &len); +#endif return mrb_fixnum_value(len); } diff --git a/mrbgems/mruby-symbol-ext/test/symbol.rb b/mrbgems/mruby-symbol-ext/test/symbol.rb index 63c1bd826..2c7a62b0c 100644 --- a/mrbgems/mruby-symbol-ext/test/symbol.rb +++ b/mrbgems/mruby-symbol-ext/test/symbol.rb @@ -7,9 +7,18 @@ assert('Symbol.all_symbols') do assert_equal foo, symbols end -assert("Symbol#length") do - assert_equal 5, :hello.size - assert_equal 5, :mruby.length +%w[size length].each do |n| + assert("Symbol##{n}") do + assert_equal 5, :hello.__send__(n) + assert_equal 4, :"aA\0b".__send__(n) + if "あ".size == 1 # enable MRB_UTF8_STRING? + assert_equal 8, :"こんにちは世界!".__send__(n) + assert_equal 4, :"aあ\0b".__send__(n) + else + assert_equal 22, :"こんにちは世界!".__send__(n) + assert_equal 6, :"aあ\0b".__send__(n) + end + end end assert("Symbol#capitalize") do |
