summaryrefslogtreecommitdiffhomepage
path: root/src/string.c
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2019-10-23 19:03:39 +0900
committerKOBAYASHI Shuji <[email protected]>2019-10-23 19:03:39 +0900
commit06bd4ffdafdaf7b18abeec22fa962d77673a72f3 (patch)
tree96ad0b592ec116f91fb3906df46f71e2d6b272d3 /src/string.c
parentfa85f91e0e3ebff7b2626bfcf550821445c064d7 (diff)
downloadmruby-06bd4ffdafdaf7b18abeec22fa962d77673a72f3.tar.gz
mruby-06bd4ffdafdaf7b18abeec22fa962d77673a72f3.zip
Optimize `str_subseq` with `MRB_UTF8_STRING` to ASCII only string
### Benchmark (with `MRB_UTF8_STRING`) ```ruby # benchmark.rb COUNT = 300000 SIZE = 10000 s = "a" * SIZE s.size # set `MRB_STR_ASCII` flag i = 0 while i < COUNT s[-1] i += 1 end ``` #### Before this patch: ``` $ time mruby benchmark.rb 2.06 real 2.05 user 0.00 sys ``` #### After this patch: ``` $ time mruby benchmark.rb 0.05 real 0.04 user 0.00 sys ```
Diffstat (limited to 'src/string.c')
-rw-r--r--src/string.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/string.c b/src/string.c
index 6ab9a1ff7..518b62ea3 100644
--- a/src/string.c
+++ b/src/string.c
@@ -603,7 +603,7 @@ str_range_to_bytes(mrb_value str, mrb_int *pos, mrb_int *len)
static inline mrb_value
str_subseq(mrb_state *mrb, mrb_value str, mrb_int beg, mrb_int len)
{
- str_range_to_bytes(str, &beg, &len);
+ if (!RSTR_ASCII_P(mrb_str_ptr(str))) str_range_to_bytes(str, &beg, &len);
return mrb_str_byte_subseq(mrb, str, beg, len);
}
#else