X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=av.c;h=95ec169f02982197e368fa8a6f9fbc1f39fab69c;hb=fa09c185cf93a599dc0290b9ee4ba0149df70363;hp=456a21e02daf911499f038769805ade648a3ca15;hpb=9c5ffd7c3fe1ab64d3e7d06810ac3ab42426718b;p=p5sagit%2Fp5-mst-13.2.git diff --git a/av.c b/av.c index 456a21e..95ec169 100644 --- a/av.c +++ b/av.c @@ -1,6 +1,6 @@ /* av.c * - * Copyright (c) 1991-2001, Larry Wall + * Copyright (c) 1991-2002, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -12,6 +12,10 @@ * meant that things should remain where they had set them)." --Treebeard */ +/* +=head1 Array Manipulation Functions +*/ + #include "EXTERN.h" #define PERL_IN_AV_C #include "perl.h" @@ -510,8 +514,8 @@ Perl_av_pop(pTHX_ register AV *av) SV *retval; MAGIC* mg; - if (!av || AvFILL(av) < 0) - return &PL_sv_undef; + if (!av) + return &PL_sv_undef; if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); if ((mg = SvTIED_mg((SV*)av, PERL_MAGIC_tied))) { @@ -530,6 +534,8 @@ Perl_av_pop(pTHX_ register AV *av) POPSTACK; return retval; } + if (AvFILL(av) < 0) + return &PL_sv_undef; retval = AvARRAY(av)[AvFILLp(av)]; AvARRAY(av)[AvFILLp(av)--] = &PL_sv_undef; if (SvSMAGICAL(av)) @@ -555,7 +561,7 @@ Perl_av_unshift(pTHX_ register AV *av, register I32 num) MAGIC* mg; I32 slide; - if (!av || num <= 0) + if (!av) return; if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); @@ -577,6 +583,8 @@ Perl_av_unshift(pTHX_ register AV *av, register I32 num) return; } + if (num <= 0) + return; if (!AvREAL(av) && AvREIFY(av)) av_reify(av); i = AvARRAY(av) - AvALLOC(av); @@ -622,7 +630,7 @@ Perl_av_shift(pTHX_ register AV *av) SV *retval; MAGIC* mg; - if (!av || AvFILL(av) < 0) + if (!av) return &PL_sv_undef; if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); @@ -642,6 +650,8 @@ Perl_av_shift(pTHX_ register AV *av) POPSTACK; return retval; } + if (AvFILL(av) < 0) + return &PL_sv_undef; retval = *AvARRAY(av); if (AvREAL(av)) *AvARRAY(av) = &PL_sv_undef; @@ -765,6 +775,7 @@ Perl_av_delete(pTHX_ AV *av, I32 key, I32 flags) else { sv = AvARRAY(av)[key]; if (key == AvFILLp(av)) { + AvARRAY(av)[key] = &PL_sv_undef; do { AvFILLp(av)--; } while (--key >= 0 && AvARRAY(av)[key] == &PL_sv_undef);