From e9515b0f73bee32254d01f1895ff1206459e6758 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=86var=20Arnfj=C3=B6r=C3=B0=20Bjarmason?= Date: Sat, 11 Aug 2007 20:33:49 +0000 Subject: [PATCH] =?utf8?q?Re:=20[PATCH]=20Optimize=20split=20//=20From:=20?= =?utf8?q?=C3=83=C2=86var=20Arnfj=C3=83=C2=B6r=C3=83=C2=B0=20Bjarmason=20=20Message-Id:=20<51dd1af80708111333kfd82e12u14?= =?utf8?q?5b5ba38e23dcce@mail.gmail.com>?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit p4raw-id: //depot/perl@31704 --- pp.c | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/pp.c b/pp.c index 02e530f..54df53e 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) && -- 1.8.3.1