From: Nicholas Clark Date: Thu, 18 Oct 2007 20:42:30 +0000 (+0000) Subject: It seems crazy for Perl_yylex() to individually shift each element off X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=c62eb2047c09034e319c2e6d5aaba369cad92b76;p=p5sagit%2Fp5-mst-13.2.git It seems crazy for Perl_yylex() to individually shift each element off PL_preambleav, and then free each in turn, rather than simply process the array in place, and allow the sv_free(PL_preambleav) to dispose of everything. p4raw-id: //depot/perl@32140 --- diff --git a/toke.c b/toke.c index 7587df1..b275c6a 100644 --- a/toke.c +++ b/toke.c @@ -3611,12 +3611,13 @@ Perl_yylex(pTHX) } } else sv_setpvs(PL_linestr,""); - if (PL_preambleav){ - while(AvFILLp(PL_preambleav) >= 0) { - SV *tmpsv = av_shift(PL_preambleav); - sv_catsv(PL_linestr, tmpsv); + if (PL_preambleav) { + SV **svp = AvARRAY(PL_preambleav); + SV **const end = svp + AvFILLp(PL_preambleav); + while(svp <= end) { + sv_catsv(PL_linestr, *svp); + ++svp; sv_catpvs(PL_linestr, ";"); - sv_free(tmpsv); } sv_free((SV*)PL_preambleav); PL_preambleav = NULL;