From 7cdef2b03e68c8f2ef0604e8e30e516ac43e9b02 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 25 May 2022 11:25:43 +0900 Subject: [PATCH] string.c: share UTF-8 length table with mruby-string-ext. --- mrbgems/mruby-string-ext/src/string.c | 8 ++------ src/string.c | 11 ++++++----- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/mrbgems/mruby-string-ext/src/string.c b/mrbgems/mruby-string-ext/src/string.c index 4e154d2a8..5a261c422 100644 --- a/mrbgems/mruby-string-ext/src/string.c +++ b/mrbgems/mruby-string-ext/src/string.c @@ -989,11 +989,7 @@ mrb_str_succ(mrb_state *mrb, mrb_value self) } #ifdef MRB_UTF8_STRING -static const char utf8len_table[] = -{ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 3, 4, 0 -}; +extern const char mrb_utf8len_table[]; static mrb_int utf8code(unsigned char* p, mrb_int limit) @@ -1003,7 +999,7 @@ utf8code(unsigned char* p, mrb_int limit) if (p[0] < 0x80) return p[0]; - len = utf8len_table[p[0]>>3]; + len = mrb_utf8len_table[p[0]>>3]; if (len <= limit && len > 1 && (p[1] & 0xc0) == 0x80) { if (len == 2) return ((p[0] & 0x1f) << 6) + (p[1] & 0x3f); diff --git a/src/string.c b/src/string.c index 34df8abc7..a19cdbcc9 100644 --- a/src/string.c +++ b/src/string.c @@ -239,16 +239,17 @@ mrb_gc_free_str(mrb_state *mrb, struct RString *str) #ifdef MRB_UTF8_STRING +const char mrb_utf8len_table[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 3, 4, 0 +}; + #define utf8_islead(c) ((unsigned char)((c)&0xc0) != 0x80) mrb_int mrb_utf8len(const char* p, const char* e) { - static const char lengths[] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 3, 4, 0 - }; - mrb_int len = lengths[(unsigned char)p[0] >> 3]; + mrb_int len = mrb_utf8len_table[(unsigned char)p[0] >> 3]; if (len > e - p) return 1; switch (len) { case 1: