summaryrefslogtreecommitdiffhomepage
path: root/src/string.c
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2019-07-05 20:37:59 +0900
committerKOBAYASHI Shuji <[email protected]>2019-07-05 22:19:31 +0900
commitf9bf2d9d8e2531b2bfebb5a80362b43ab559b56f (patch)
tree5cf40139bbe39d854bd0126fb605603451c35ff4 /src/string.c
parent8294ce9fd458a0a1acf8fcdcb6161b4a020866ad (diff)
downloadmruby-f9bf2d9d8e2531b2bfebb5a80362b43ab559b56f.tar.gz
mruby-f9bf2d9d8e2531b2bfebb5a80362b43ab559b56f.zip
Read/write `MRB_STR_ASCII` flag only when `MRB_UTF8_STRING` is defined
Diffstat (limited to 'src/string.c')
-rw-r--r--src/string.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/string.c b/src/string.c
index 805cf01dc..078c028d8 100644
--- a/src/string.c
+++ b/src/string.c
@@ -258,14 +258,15 @@ mrb_utf8_len(const char *str, mrb_int byte_len)
static mrb_int
utf8_strlen(mrb_value str)
{
- mrb_int byte_len = RSTRING_LEN(str);
+ struct RString *s = mrb_str_ptr(str);
+ mrb_int byte_len = RSTR_LEN(s);
- if (RSTRING(str)->flags & MRB_STR_ASCII) {
+ if (RSTR_ASCII_P(s)) {
return byte_len;
}
else {
- mrb_int utf8_len = mrb_utf8_len(RSTRING_PTR(str), byte_len);
- if (byte_len == utf8_len) RSTRING(str)->flags |= MRB_STR_ASCII;
+ mrb_int utf8_len = mrb_utf8_len(RSTR_PTR(s), byte_len);
+ if (byte_len == utf8_len) RSTR_SET_ASCII_FLAG(s);
return utf8_len;
}
}
@@ -512,8 +513,7 @@ str_replace(mrb_state *mrb, struct RString *s1, struct RString *s2)
mrb_check_frozen(mrb, s1);
if (s1 == s2) return mrb_obj_value(s1);
- s1->flags &= ~MRB_STR_ASCII;
- s1->flags |= s2->flags&MRB_STR_ASCII;
+ RSTR_COPY_ASCII_FLAG(s1, s2);
len = RSTR_LEN(s2);
if (RSTR_SHARED_P(s1)) {
str_decref(mrb, s1->as.heap.aux.shared);
@@ -651,7 +651,7 @@ MRB_API void
mrb_str_modify(mrb_state *mrb, struct RString *s)
{
mrb_check_frozen(mrb, s);
- s->flags &= ~MRB_STR_ASCII;
+ RSTR_UNSET_ASCII_FLAG(s);
if (RSTR_SHARED_P(s)) {
mrb_shared_string *shared = s->as.heap.aux.shared;