X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pp_sort.c;h=7585b759405dc7a38534af4775eba933385301cd;hb=e8e0953481a8eb69731d048ec19e15bbd537fd73;hp=c5855ffafdf7927123f5e3090e3497f6a1257339;hpb=cbbf89328f29f925842d180c1410e324b297744d;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pp_sort.c b/pp_sort.c index c5855ff..7585b75 100644 --- a/pp_sort.c +++ b/pp_sort.c @@ -1,7 +1,7 @@ /* pp_sort.c * * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - * 2000, 2001, 2002, 2003, 2004, 2005, by Larry Wall and others + * 2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -341,12 +341,14 @@ typedef struct { static I32 cmp_desc(pTHX_ gptr a, gptr b) { + dVAR; return -PL_sort_RealCmp(aTHX_ a, b); } STATIC void S_mergesortsv(pTHX_ gptr *base, size_t nmemb, SVCOMPARE_t cmp, U32 flags) { + dVAR; IV i, run, offset; I32 sense, level; register gptr *f1, *f2, *t, *b, *p; @@ -1314,6 +1316,7 @@ S_qsortsvu(pTHX_ SV ** array, size_t num_elts, SVCOMPARE_t compare) static I32 cmpindir(pTHX_ gptr a, gptr b) { + dVAR; gptr * const ap = (gptr *)a; gptr * const bp = (gptr *)b; const I32 sense = PL_sort_RealCmp(aTHX_ *ap, *bp); @@ -1326,6 +1329,7 @@ cmpindir(pTHX_ gptr a, gptr b) static I32 cmpindir_desc(pTHX_ gptr a, gptr b) { + dVAR; gptr * const ap = (gptr *)a; gptr * const bp = (gptr *)b; const I32 sense = PL_sort_RealCmp(aTHX_ *ap, *bp); @@ -1341,6 +1345,7 @@ cmpindir_desc(pTHX_ gptr a, gptr b) STATIC void S_qsortsv(pTHX_ gptr *list1, size_t nmemb, SVCOMPARE_t cmp, U32 flags) { + dVAR; if ((flags & SORTf_STABLE) != 0) { register gptr **pp, *q; register size_t n, j, i; @@ -1510,12 +1515,12 @@ PP(pp_sort) } } if (!(cv && CvROOT(cv))) { - if (cv && CvXSUB(cv)) { + if (cv && CvISXSUB(cv)) { is_xsub = 1; } else if (gv) { SV *tmpstr = sv_newmortal(); - gv_efullname3(tmpstr, gv, Nullch); + gv_efullname3(tmpstr, gv, NULL); DIE(aTHX_ "Undefined sort subroutine \"%"SVf"\" called", tmpstr); } @@ -1531,7 +1536,7 @@ PP(pp_sort) } } else { - PL_sortcop = Nullop; + PL_sortcop = NULL; stash = CopSTASH(PL_curcop); } @@ -1548,7 +1553,7 @@ PP(pp_sort) p2 = SP; for (i=0; i < max; i++) { SV **svp = av_fetch(av, i, FALSE); - *SP++ = (svp) ? *svp : Nullsv; + *SP++ = (svp) ? *svp : NULL; } } else { @@ -1626,8 +1631,8 @@ PP(pp_sort) SAVESPTR(PL_firstgv); SAVESPTR(PL_secondgv); SAVESPTR(PL_sortstash); - PL_firstgv = gv_fetchpv("a", TRUE, SVt_PV); - PL_secondgv = gv_fetchpv("b", TRUE, SVt_PV); + PL_firstgv = gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV); + PL_secondgv = gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV); PL_sortstash = stash; SAVESPTR(GvSV(PL_firstgv)); SAVESPTR(GvSV(PL_secondgv)); @@ -1650,10 +1655,10 @@ PP(pp_sort) if (hasargs) { /* This is mostly copied from pp_entersub */ - AV *av = (AV*)PAD_SVl(0); + AV * const av = (AV*)PAD_SVl(0); cx->blk_sub.savearray = GvAV(PL_defgv); - GvAV(PL_defgv) = (AV*)SvREFCNT_inc(av); + GvAV(PL_defgv) = (AV*)SvREFCNT_inc_simple(av); CX_CURPAD_SAVE(cx->blk_sub); cx->blk_sub.argarray = av; } @@ -1837,11 +1842,12 @@ S_sv_i_ncmp(pTHX_ SV *a, SV *b) #define tryCALL_AMAGICbin(left,right,meth) \ (PL_amagic_generation && (SvAMAGIC(left)||SvAMAGIC(right))) \ ? amagic_call(left, right, CAT2(meth,_amg), 0) \ - : Nullsv; + : NULL; static I32 S_amagic_ncmp(pTHX_ register SV *a, register SV *b) { + dVAR; SV * const tmpsv = tryCALL_AMAGICbin(a,b,ncmp); if (tmpsv) { if (SvIOK(tmpsv)) { @@ -1863,6 +1869,7 @@ S_amagic_ncmp(pTHX_ register SV *a, register SV *b) static I32 S_amagic_i_ncmp(pTHX_ register SV *a, register SV *b) { + dVAR; SV * const tmpsv = tryCALL_AMAGICbin(a,b,ncmp); if (tmpsv) { if (SvIOK(tmpsv)) { @@ -1884,6 +1891,7 @@ S_amagic_i_ncmp(pTHX_ register SV *a, register SV *b) static I32 S_amagic_cmp(pTHX_ register SV *str1, register SV *str2) { + dVAR; SV * const tmpsv = tryCALL_AMAGICbin(str1,str2,scmp); if (tmpsv) { if (SvIOK(tmpsv)) { @@ -1905,6 +1913,7 @@ S_amagic_cmp(pTHX_ register SV *str1, register SV *str2) static I32 S_amagic_cmp_locale(pTHX_ register SV *str1, register SV *str2) { + dVAR; SV * const tmpsv = tryCALL_AMAGICbin(str1,str2,scmp); if (tmpsv) { if (SvIOK(tmpsv)) {