string.c: add fastpath in str_ensure_byte_pos

If the string only contain single byte characters we can
skips all the costly checks.
This commit is contained in:
Jean Boussier 2024-08-09 15:27:42 +02:00
parent a332367dad
commit 3bac5f6af5
Notes: git 2024-08-09 20:07:03 +00:00

View File

@ -4254,6 +4254,7 @@ rb_str_index_m(int argc, VALUE *argv, VALUE str)
static void static void
str_ensure_byte_pos(VALUE str, long pos) str_ensure_byte_pos(VALUE str, long pos)
{ {
if (!single_byte_optimizable(str)) {
const char *s = RSTRING_PTR(str); const char *s = RSTRING_PTR(str);
const char *e = RSTRING_END(str); const char *e = RSTRING_END(str);
const char *p = s + pos; const char *p = s + pos;
@ -4262,6 +4263,7 @@ str_ensure_byte_pos(VALUE str, long pos)
"offset %ld does not land on character boundary", pos); "offset %ld does not land on character boundary", pos);
} }
} }
}
/* /*
* call-seq: * call-seq: