summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-symbol-ext/src
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2019-02-04 18:11:22 +0900
committerKOBAYASHI Shuji <[email protected]>2019-02-04 18:11:22 +0900
commit69fd1a592560d321061790c94f93532db93dccb9 (patch)
treeb7a94cb0998d7cdb6739dc550bf26ad1fe3e6513 /mrbgems/mruby-symbol-ext/src
parent3f7137feaeb3a86df01ae080b4d8826250f4ef29 (diff)
downloadmruby-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.c7
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);
}