X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pp_sort.c;h=dfcdac4bfdfbe78125dd78d1ee2530d3433aaebd;hb=d822fdf9523774354b4abafec1aa0c8639788575;hp=f349c6ff52f4f50066e5cc3fd06f150320219ec8;hpb=fe2ae5081bc2e29bed890e921179e594deb788ec;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pp_sort.c b/pp_sort.c index f349c6f..dfcdac4 100644 --- a/pp_sort.c +++ b/pp_sort.c @@ -1695,9 +1695,9 @@ PP(pp_sort) : ( overloading ? S_amagic_ncmp : S_sv_ncmp ) ) : ( IN_LOCALE_RUNTIME ? ( overloading - ? S_amagic_cmp_locale - : sv_cmp_locale_static) - : ( overloading ? S_amagic_cmp : sv_cmp_static)), + ? (SVCOMPARE_t)S_amagic_cmp_locale + : (SVCOMPARE_t)sv_cmp_locale_static) + : ( overloading ? (SVCOMPARE_t)S_amagic_cmp : (SVCOMPARE_t)sv_cmp_static)), sort_flags); } if ((priv & OPpSORT_REVERSE) != 0) { @@ -1847,6 +1847,8 @@ S_sv_i_ncmp(pTHX_ SV *a, SV *b) ? amagic_call(left, right, CAT2(meth,_amg), 0) \ : NULL; +#define SORT_NORMAL_RETURN_VALUE(val) (((val) > 0) ? 1 : ((val) ? -1 : 0)) + static I32 S_amagic_ncmp(pTHX_ register SV *a, register SV *b) { @@ -1855,15 +1857,11 @@ S_amagic_ncmp(pTHX_ register SV *a, register SV *b) if (tmpsv) { if (SvIOK(tmpsv)) { const I32 i = SvIVX(tmpsv); - if (i > 0) - return 1; - return i? -1 : 0; + return SORT_NORMAL_RETURN_VALUE(i); } else { const NV d = SvNV(tmpsv); - if (d > 0) - return 1; - return d ? -1 : 0; + return SORT_NORMAL_RETURN_VALUE(d); } } return S_sv_ncmp(aTHX_ a, b); @@ -1877,15 +1875,11 @@ S_amagic_i_ncmp(pTHX_ register SV *a, register SV *b) if (tmpsv) { if (SvIOK(tmpsv)) { const I32 i = SvIVX(tmpsv); - if (i > 0) - return 1; - return i? -1 : 0; + return SORT_NORMAL_RETURN_VALUE(i); } else { const NV d = SvNV(tmpsv); - if (d > 0) - return 1; - return d ? -1 : 0; + return SORT_NORMAL_RETURN_VALUE(d); } } return S_sv_i_ncmp(aTHX_ a, b); @@ -1899,15 +1893,11 @@ S_amagic_cmp(pTHX_ register SV *str1, register SV *str2) if (tmpsv) { if (SvIOK(tmpsv)) { const I32 i = SvIVX(tmpsv); - if (i > 0) - return 1; - return i? -1 : 0; + return SORT_NORMAL_RETURN_VALUE(i); } else { const NV d = SvNV(tmpsv); - if (d > 0) - return 1; - return d? -1 : 0; + return SORT_NORMAL_RETURN_VALUE(d); } } return sv_cmp(str1, str2); @@ -1921,15 +1911,11 @@ S_amagic_cmp_locale(pTHX_ register SV *str1, register SV *str2) if (tmpsv) { if (SvIOK(tmpsv)) { const I32 i = SvIVX(tmpsv); - if (i > 0) - return 1; - return i? -1 : 0; + return SORT_NORMAL_RETURN_VALUE(i); } else { const NV d = SvNV(tmpsv); - if (d > 0) - return 1; - return d? -1 : 0; + return SORT_NORMAL_RETURN_VALUE(d); } } return sv_cmp_locale(str1, str2);