diff options
| author | KOBAYASHI Shuji <[email protected]> | 2019-02-04 18:11:22 +0900 |
|---|---|---|
| committer | KOBAYASHI Shuji <[email protected]> | 2019-02-04 18:11:22 +0900 |
| commit | 69fd1a592560d321061790c94f93532db93dccb9 (patch) | |
| tree | b7a94cb0998d7cdb6739dc550bf26ad1fe3e6513 /mrbgems/mruby-symbol-ext/src | |
| parent | 3f7137feaeb3a86df01ae080b4d8826250f4ef29 (diff) | |
| download | mruby-69fd1a592560d321061790c94f93532db93dccb9.tar.gz mruby-69fd1a592560d321061790c94f93532db93dccb9.zip | |
Fix `Symbol#size` for multi-byte characters with `MRB_UTF8_STRING`
Before:
p :あ.size #=> 3
After:
p :あ.size #=> 1
Diffstat (limited to 'mrbgems/mruby-symbol-ext/src')
| -rw-r--r-- | mrbgems/mruby-symbol-ext/src/symbol.c | 7 |
1 files changed, 7 insertions, 0 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); } |
