summaryrefslogtreecommitdiff
path: root/pp.c
diff options
context:
space:
mode:
authorÆvar Arnfjörð Bjarmason <avar@cpan.org>2007-08-11 20:33:49 +0000
committerAbhijit Menon-Sen <ams@wiw.org>2007-08-12 14:20:44 +0000
commite9515b0f73bee32254d01f1895ff1206459e6758 (patch)
tree296864db06e0d3d73919043d7d0d778fcbe43262 /pp.c
parentdf44d732c379359119ddcbb4645f9d1a2c1ffec2 (diff)
downloadperl-e9515b0f73bee32254d01f1895ff1206459e6758.tar.gz
Re: [PATCH] Optimize split //
From: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Message-Id: <51dd1af80708111333kfd82e12u145b5ba38e23dcce@mail.gmail.com> p4raw-id: //depot/perl@31704
Diffstat (limited to 'pp.c')
-rw-r--r--pp.c38
1 files changed, 24 insertions, 14 deletions
diff --git a/pp.c b/pp.c
index 02e530f974..54df53e6a5 100644
--- a/pp.c
+++ b/pp.c
@@ -4726,26 +4726,36 @@ PP(pp_split)
else
EXTEND(SP, slen);
- while (--limit) {
- m = s;
-
- if (do_utf8)
+ if (do_utf8) {
+ while (--limit) {
+ /* keep track of how many bytes we skip over */
+ m = s;
s += UTF8SKIP(s);
- else
- ++s;
+ dstr = newSVpvn(m, s-m);
- dstr = newSVpvn(m, s-m);
+ if (make_mortal)
+ sv_2mortal(dstr);
- if (make_mortal)
- sv_2mortal(dstr);
- if (do_utf8)
(void)SvUTF8_on(dstr);
+ PUSHs(dstr);
- PUSHs(dstr);
+ if (s >= strend)
+ break;
+ }
+ } else {
+ while (--limit) {
+ dstr = newSVpvn(s, 1);
+
+ s++;
+
+ if (make_mortal)
+ sv_2mortal(dstr);
- /* are we there yet? */
- if (s >= strend)
- break;
+ PUSHs(dstr);
+
+ if (s >= strend)
+ break;
+ }
}
}
else if (do_utf8 == ((rx->extflags & RXf_UTF8) != 0) &&