aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-09-26 05:10:56 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-09-26 05:10:56 +0000
commit71789a197dd349f97af6dcb8cfa0f856ee44ce1e (patch)
tree1a7044299593ff78a053b592f94904b1f1cba4d5
parent21dd748e15469bf504940a2a2febcd5d03a2e5a8 (diff)
downloadruby-71789a197dd349f97af6dcb8cfa0f856ee44ce1e.tar.gz
string.c: fast path of lstrip_offset
* string.c (lstrip_offset): add a fast path in the case of single byte optimizable strings, as well as rstrip_offset. [ruby-core:77392] [Feature #12788] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56250 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--string.c16
2 files changed, 17 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 78be5fc367..e3ba79e450 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon Sep 26 14:10:54 2016 Ary Borenszweig <ary@esperanto.org.ar>
+
+ * string.c (lstrip_offset): add a fast path in the case of single
+ byte optimizable strings, as well as rstrip_offset.
+ [ruby-core:77392] [Feature #12788]
+
Mon Sep 26 12:00:12 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* gems/bundled_gems: update to minitest-5.9.1.
diff --git a/string.c b/string.c
index c537bbf4ab..8a57bc9048 100644
--- a/string.c
+++ b/string.c
@@ -8041,13 +8041,19 @@ lstrip_offset(VALUE str, const char *s, const char *e, rb_encoding *enc)
const char *const start = s;
if (!s || s >= e) return 0;
+
/* remove spaces at head */
- while (s < e) {
- int n;
- unsigned int cc = rb_enc_codepoint_len(s, e, &n, enc);
+ if (single_byte_optimizable(str)) {
+ while (s < e && ascii_isspace(*s)) s++;
+ }
+ else {
+ while (s < e) {
+ int n;
+ unsigned int cc = rb_enc_codepoint_len(s, e, &n, enc);
- if (!rb_isspace(cc)) break;
- s += n;
+ if (!rb_isspace(cc)) break;
+ s += n;
+ }
}
return s - start;
}