From 25e4ec3f377275c7be49c9fab0b1cac46621085d Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 4 Feb 2016 23:33:16 +0900 Subject: cache UTF8 status for utf8_strlen(); ref #980 --- src/string.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src') diff --git a/src/string.c b/src/string.c index 2b01cc3a5..8d79defe0 100644 --- a/src/string.c +++ b/src/string.c @@ -273,11 +273,17 @@ utf8_strlen(mrb_value str, mrb_int len) mrb_int total = 0; char* p = RSTRING_PTR(str); char* e = p; + if (RSTRING(str)->flags & MRB_STR_NO_UTF) { + return RSTRING_LEN(str); + } e += len < 0 ? RSTRING_LEN(str) : len; while (pflags |= MRB_STR_NO_UTF; + } return total; } @@ -652,6 +658,7 @@ MRB_API void mrb_str_modify(mrb_state *mrb, struct RString *s) { check_frozen(mrb, s); + s->flags &= ~MRB_STR_NO_UTF; if (RSTR_SHARED_P(s)) { mrb_shared_string *shared = s->as.heap.aux.shared; -- cgit v1.2.3