Branch Coverage

XS.xs
Criterion Covered Total %
branch 3455 4866 71.0


line true false branch
400 390993 927 if (sv_isobject(n)) {
401 390993 0 const char *hvname = HvNAME_get(SvSTASH(SvRV(n)));
390993 0 const char *hvname = HvNAME_get(SvSTASH(SvRV(n)));
0 390993 const char *hvname = HvNAME_get(SvSTASH(SvRV(n)));
0 0 const char *hvname = HvNAME_get(SvSTASH(SvRV(n)));
390993 0 const char *hvname = HvNAME_get(SvSTASH(SvRV(n)));
0 390993 const char *hvname = HvNAME_get(SvSTASH(SvRV(n)));
402 390993 0 if (hvname != 0) {
403 8 390985 if (strEQ(hvname, "Math::BigInt") || /* BigFloat not here, force to PP */
404 8 0 strEQ(hvname, "Math::GMPz") || strEQ(hvname, "Math::GMP") ||
8 0 strEQ(hvname, "Math::GMPz") || strEQ(hvname, "Math::GMP") ||
405 8 0 strEQ(hvname, "Math::GMPq") || strEQ(hvname, "Math::AnyNum") ||
8 0 strEQ(hvname, "Math::GMPq") || strEQ(hvname, "Math::AnyNum") ||
406 8 0 strEQ(hvname, "Math::Pari") || strEQ(hvname, "Math::BigInt::Lite"))
0 8 strEQ(hvname, "Math::Pari") || strEQ(hvname, "Math::BigInt::Lite"))
423 276617 10237 const char* mustbe = (negok) ? "must be an integer" : "must be a non-negative integer";
430 0 286854 if (SVNUMTEST(n)) { /* If defined as number, use it */
431 0 0 if (SvIsUV(n) || SvIVX(n) >= 0) return 1; /* The normal case */
0 0 if (SvIsUV(n) || SvIVX(n) >= 0) return 1; /* The normal case */
432 0 0 if (negok) return -1;
435 278228 8626 if (sv_isobject(n)) {
437 5 278223 if (!isbignum) return 0;
439 20 286829 if (!SvOK(n)) croak("Parameter must be defined");
440 286828 1 if (SvGAMAGIC(n) && !isbignum) ptr = SvPV(n, len);
278223 8605 if (SvGAMAGIC(n) && !isbignum) ptr = SvPV(n, len);
278223 0 if (SvGAMAGIC(n) && !isbignum) ptr = SvPV(n, len);
278223 0 if (SvGAMAGIC(n) && !isbignum) ptr = SvPV(n, len);
1 278223 if (SvGAMAGIC(n) && !isbignum) ptr = SvPV(n, len);
442 286828 1 if (len == 0 || ptr == 0) croak("Parameter %s", mustbe);
0 286828 if (len == 0 || ptr == 0) croak("Parameter %s", mustbe);
443 2107 284721 if (ptr[0] == '-' && negok) {
2103 4 if (ptr[0] == '-' && negok) {
445 5 284720 } else if (ptr[0] == '+') {
449 286827 1 if (len == 0 || !isDIGIT(ptr[0])) croak("Parameter '%" SVf "' %s", n, mustbe);
24 286803 if (len == 0 || !isDIGIT(ptr[0])) croak("Parameter '%" SVf "' %s", n, mustbe);
451 286810 223 while (len > 0 && *ptr == '0') /* Strip all leading zeros */
230 286580 while (len > 0 && *ptr == '0') /* Strip all leading zeros */
453 223 286580 if (len == 0) /* 0 or -0 */
456 2101 284479 if (isneg) { ret = -1; maxlen = ivmax_maxlen; maxstr = ivmin_str; }
458 21464602 286568 for (i = 0; i < len; i++) /* Ensure all characters are digits */
459 12 21464590 if (!isDIGIT(ptr[i]))
461 237753 48815 if (len > maxlen) return 0; /* Obvious bigint */
462 6926 41889 if (len < maxlen) return ret; /* Valid small integer */
463 229764 135 for (i = 0; i < maxlen; i++) /* Check if in range */
464 41754 188010 if (ptr[i] != maxstr[i])
465 586 41168 return ptr[i] < maxstr[i] ? ret : 0;
478 0 5311135 if (svn == 0) croak("Parameter must be defined");
480 5024281 286854 if (SVNUMTEST(svn)) {
482 4121759 902522 if (n >= 0) {
483 52582 4069177 if (n == 0 && (mask & IFLAG_NONZERO))
1 52581 if (n == 0 && (mask & IFLAG_NONZERO))
488 127250 775272 if (SvIsUV(svn)) {
489 27 127223 if (mask & IFLAG_IV)
494 361034 414238 if (mask & IFLAG_ABS) { *val = (UV)(-n); return 1; }
495 16 414222 if (mask & IFLAG_POS) croak("Parameter '%" SVf "' must be a non-negative integer", svn);
501 7613 279183 if (status == 1) {
503 223 7390 if (n == 0 && (mask & IFLAG_NONZERO))
0 223 if (n == 0 && (mask & IFLAG_NONZERO))
505 718 6895 if (n > (UV)IV_MAX && (mask & IFLAG_IV))
0 718 if (n > (UV)IV_MAX && (mask & IFLAG_IV))
508 257 278926 } else if (status == -1) {
510 31 226 if (mask & IFLAG_ABS) { *val = (UV)(-n); status = 1; }
530 0 160652 if (n == 0) return;
531 140456 20196 if (astatus != -1) {
535 20196 0 *a = (r == 0) ? 0 : n-r;
551 107650 7465 int use_gmp = stashflags & VCALL_GMP && _XS_get_callgmp() && _XS_get_callgmp() >= minversion;
0 107650 int use_gmp = stashflags & VCALL_GMP && _XS_get_callgmp() && _XS_get_callgmp() >= minversion;
0 0 int use_gmp = stashflags & VCALL_GMP && _XS_get_callgmp() && _XS_get_callgmp() >= minversion;
553 0 115115 if (use_gmp && hv_exists(MY_CXT.MPUGMP,name,namelen)) {
0 0 if (use_gmp && hv_exists(MY_CXT.MPUGMP,name,namelen)) {
555 0 0 if (gvp) gv = *gvp;
557 115115 0 if (!gv && (stashflags & VCALL_PP))
115114 1 if (!gv && (stashflags & VCALL_PP))
559 115115 0 if (!gv) {
560 115114 1 GV ** gvp = (GV**)hv_fetch(stashflags & VCALL_PP? MY_CXT.MPUPP : MY_CXT.MPUroot, name,namelen,0);
561 115115 0 if (gvp) gv = *gvp;
565 0 115115 PUSHMARK(PL_stack_sp-nargs);
578 2690376 4121 for (i = 0; i < ngmpinfo; i++)
579 110971 2579405 if (strcmp(gmp_info[i].name, name) == 0)
589 110971 4121 bool usegmp = ginfoi >= 0 && gmp_is_ok;
107650 3321 bool usegmp = ginfoi >= 0 && gmp_is_ok;
591 107650 7442 if (usegmp) {
636 5169 2 for (; nops < 500; o = o->op_next) {
637 56 5113 if (!o) {
638 0 56 if (nbranch > 0) { o = branches[--nbranch]; continue; }
663 0 28 if (nbranch >= 8) return 1; /* Too deep */
667 22 56 if (nbranch > 0) { o = branches[--nbranch]; continue; }
671 2 56 if (nops >= 500) return 1;
706 108145 9 if (!SvOK(output) || sv_isobject(output) || SVNUMTEST(output))
46229 61916 if (!SvOK(output) || sv_isobject(output) || SVNUMTEST(output))
46228 1 if (!SvOK(output) || sv_isobject(output) || SVNUMTEST(output))
709 1 0 if (!input || !sv_isobject(input)) {
1 0 if (!input || !sv_isobject(input)) {
712 0 0 const char *iname = HvNAME_get(SvSTASH(SvRV(input)));
0 0 const char *iname = HvNAME_get(SvSTASH(SvRV(input)));
0 0 const char *iname = HvNAME_get(SvSTASH(SvRV(input)));
0 0 const char *iname = HvNAME_get(SvSTASH(SvRV(input)));
0 0 const char *iname = HvNAME_get(SvSTASH(SvRV(input)));
0 0 const char *iname = HvNAME_get(SvSTASH(SvRV(input)));
713 0 0 if (strEQ(iname, "Math::BigInt")) {
715 0 0 } else if (strEQ(iname, "Math::GMPz")) {
717 0 0 } else if (strEQ(iname, "Math::GMP")) {
720 0 0 dSP; (void)POPs; ENTER; PUSHMARK(SP);
721 0 0 XPUSHs(sv_2mortal(newSVpv(iname, 0))); XPUSHs(output);
0 0 XPUSHs(sv_2mortal(newSVpv(iname, 0))); XPUSHs(output);
728 0 2575 dSP; ENTER; PUSHMARK(SP);
729 0 2575 XPUSHs(r);
851 962 73 if (x <= (UV)IV_MAX) xsign = 0;
852 950 85 if (y <= (UV)IV_MAX) ysign = 0;
853 968 67 if (xsign == ysign && x == y) return 0;
88 880 if (xsign == ysign && x == y) return 0;
855 67 880 if (xsign != ysign) return (xsign < ysign) ? -1 : 1;
25 42 if (xsign != ysign) return (xsign < ysign) ? -1 : 1;
857 28 852 return ((xsign == -1 && (IV)x < (IV)y) || (xsign != -1 && x < y)) ? -1 : 1;
15 13 return ((xsign == -1 && (IV)x < (IV)y) || (xsign != -1 && x < y)) ? -1 : 1;
852 15 return ((xsign == -1 && (IV)x < (IV)y) || (xsign != -1 && x < y)) ? -1 : 1;
183 669 return ((xsign == -1 && (IV)x < (IV)y) || (xsign != -1 && x < y)) ? -1 : 1;
897 0 2314 if (svarr == 0) {
899 0 0 return svp ? *svp : &PL_sv_undef;
928 462 0 USE_ARREF(avp, sva, fstr, AR_READ);
0 462 USE_ARREF(avp, sva, fstr, AR_READ);
0 462 USE_ARREF(avp, sva, fstr, AR_READ);
931 50 412 if (len == 0) {
935 0 412 New(0, r, len, UV);
936 2159 329 for (i = 0; i < len; i++) {
938 0 2159 if (iv == 0) continue;
939 1903 256 if (SVNUMTEST(iv)) {
941 424 1479 if (n < 0) {
942 73 351 if (SvIsUV(iv)) itype |= IARR_TYPE_POS;
944 20 404 if (itype == IARR_TYPE_BAD) break;
948 18 238 READ_UV_IARR(r[i], iv, itype);
181 57 READ_UV_IARR(r[i], iv, itype);
30 151 READ_UV_IARR(r[i], iv, itype);
199 57 READ_UV_IARR(r[i], iv, itype);
193 6 READ_UV_IARR(r[i], iv, itype);
951 83 329 if (i < len) {
957 318 11 if (want_sort) {
958 99 219 if (itype == IARR_TYPE_NEG) {
959 555 82 for (i = 1; i < len; i++)
960 17 538 if ( (IV)r[i] <= (IV)r[i-1] )
963 1042 198 for (i = 1; i < len; i++)
964 21 1021 if (r[i] <= r[i-1])
967 38 280 if (i < len)
982 70 0 if (!SvROK(sv) || SvTYPE(SvRV(sv)) != SVt_PVAV) return NULL;
0 70 if (!SvROK(sv) || SvTYPE(SvRV(sv)) != SVt_PVAV) return NULL;
984 0 70 if (SvMAGICAL(av)) return NULL;
987 116 34 for (i = 0; i < len; i++) {
989 103 13 if (!SVNUMTEST(elem) || (!SvIsUV(elem) && SvIVX(elem) < 0)) return NULL;
95 8 if (!SVNUMTEST(elem) || (!SvIsUV(elem) && SvIVX(elem) < 0)) return NULL;
15 80 if (!SVNUMTEST(elem) || (!SvIsUV(elem) && SvIVX(elem) < 0)) return NULL;
990 54 34 if (i > 0 && SvUVX(elem) <= SvUVX(arr[i-1])) return NULL;
8 46 if (i > 0 && SvUVX(elem) <= SvUVX(arr[i-1])) return NULL;
1002 0 202 if (len == 0) {
1006 0 202 New(0, r, len, UV);
1007 923 147 for (i = 0; i < len; i++) {
1009 800 123 if (SVNUMTEST(iv)) {
1011 85 715 if (n < 0) {
1012 36 49 if (SvIsUV(iv)) itype |= IARR_TYPE_POS;
1014 6 79 if (itype == IARR_TYPE_BAD) break;
1018 27 96 READ_UV_IARR(r[i], iv, itype);
48 48 READ_UV_IARR(r[i], iv, itype);
12 36 READ_UV_IARR(r[i], iv, itype);
75 48 READ_UV_IARR(r[i], iv, itype);
74 1 READ_UV_IARR(r[i], iv, itype);
1021 55 147 if (i < len) {
1027 87 60 if (want_sort) {
1028 23 64 if (itype == IARR_TYPE_NEG) {
1029 32 13 for (i = 1; i < len; i++)
1030 10 22 if ( (IV)r[i] <= (IV)r[i-1] )
1033 160 44 for (i = 1; i < len; i++)
1034 20 140 if (r[i] <= r[i-1])
1037 30 57 if (i < len)
1047 0 14 if (SvTYPE((SV*)av) != SVt_PVAV)
1050 0 14 New(0, r, len, UV);
1051 108 14 for (i = len-1; i >= 0; i--) {
1053 0 108 if (_validate_and_set(r+i, aTHX_ *psvd, IFLAG_ANY) != 1) break;
1055 14 94 if (r[i] >= (UV)base && i > 0) {
11 3 if (r[i] >= (UV)base && i > 0) {
1062 0 14 if (i >= 0) {
1074 28 0 if (typea == IARR_TYPE_BAD || typeb == IARR_TYPE_BAD)
0 28 if (typea == IARR_TYPE_BAD || typeb == IARR_TYPE_BAD)
1076 17 11 if (typea != IARR_TYPE_NEG && typeb != IARR_TYPE_NEG) {
17 0 if (typea != IARR_TYPE_NEG && typeb != IARR_TYPE_NEG) {
1078 3 14 if (UV_MAX-amax < bmax) return IARR_TYPE_BAD;
1079 2 12 if (amax+bmax > (UV)IV_MAX) return IARR_TYPE_POS;
1083 11 0 if (typea == IARR_TYPE_POS || typeb == IARR_TYPE_POS)
3 8 if (typea == IARR_TYPE_POS || typeb == IARR_TYPE_POS)
1086 7 1 if ((IV)amax > 0 && (IV)bmax > 0 && amax + bmax > (UV)IV_MAX)
7 0 if ((IV)amax > 0 && (IV)bmax > 0 && amax + bmax > (UV)IV_MAX)
2 5 if ((IV)amax > 0 && (IV)bmax > 0 && amax + bmax > (UV)IV_MAX)
1088 6 0 if ((IV)amin < 0 && (IV)bmin < 0 && (UV)(-(IV)amin) + (UV)(-(IV)bmin) > (UV)IV_MAX)
4 2 if ((IV)amin < 0 && (IV)bmin < 0 && (UV)(-(IV)amin) + (UV)(-(IV)bmin) > (UV)IV_MAX)
2 2 if ((IV)amin < 0 && (IV)bmin < 0 && (UV)(-(IV)amin) + (UV)(-(IV)bmin) > (UV)IV_MAX)
1090 4 0 if (((IV)amin > 0 || (IV)bmin > 0) && (IV)(amin+bmin) >= 0)
2 2 if (((IV)amin > 0 || (IV)bmin > 0) && (IV)(amin+bmin) >= 0)
1 1 if (((IV)amin > 0 || (IV)bmin > 0) && (IV)(amin+bmin) >= 0)
1132 70 96 if (cache && cache->status[0] != 0) {
45 25 if (cache && cache->status[0] != 0) {
1135 4 117 _SC_GET_VALUE(*lostatus, *loval, avarr, loindex);
1136 23 94 if (cache) {
1141 68 94 if (cache && cache->status[1] != 0) {
45 23 if (cache && cache->status[1] != 0) {
1144 0 117 _SC_GET_VALUE(*histatus, *hival, avarr, hiindex);
1145 23 94 if (cache) {
1167 39 130 if (sign != 1 && sign != -1)
3 36 if (sign != 1 && sign != -1)
1170 3 163 if (len == 0) {
1178 4 159 if (_sc_set_lohi(aTHX_ arr, cache, lo, hi, &lostatus, &histatus, &rlo, &rhi) < 0)
1182 51 108 if (cmp <= 0) { *eq = cmp==0; return lo; }
1185 34 74 if (cmp >= 0) { *eq = cmp==0; return hi + (cmp>0); }
1188 218 29 while (hi-lo > 1) {
1190 47 171 SC_SET_MID_VALUE(midstatus, rmid, arr, (size_t)mid, cache);
0 47 SC_SET_MID_VALUE(midstatus, rmid, arr, (size_t)mid, cache);
95 76 SC_SET_MID_VALUE(midstatus, rmid, arr, (size_t)mid, cache);
95 0 SC_SET_MID_VALUE(midstatus, rmid, arr, (size_t)mid, cache);
0 76 SC_SET_MID_VALUE(midstatus, rmid, arr, (size_t)mid, cache);
1192 45 173 if (cmp == 0) { *eq = 1; return mid; }
1193 89 84 if (cmp < 0) { lo = mid; rlo = rmid; lostatus = midstatus; }
1196 21 8 if (sign == histatus && rhi == val)
0 21 if (sign == histatus && rhi == val)
1198 0 29 else if (_sign_cmp(sign,val, histatus,rhi) > 0)
1211 64 0 return (index < 0) ? index : eq ? 0 : index+1;
51 13 return (index < 0) ? index : eq ? 0 : index+1;
1222 33 0 return (index < 0) ? index : eq ? index+1 : 0;
25 8 return (index < 0) ? index : eq ? index+1 : 0;
1231 65 7 return (index < 0) ? index : eq ? 1 : 0;
1237 8 25 if (index <= 0)
1243 13 12 if (pos > alen/2) {
1244 5 8 if (pos < alen) {
1250 0 12 if (pos > 1) {
1262 2 47 if (index <= 0)
1266 39 8 SV* newsvb = NEWSVINT(bstatus, b);
1268 38 9 if ((Size_t)index > alen/2) {
1270 19 19 if ((Size_t)index <= alen) {
1279 3 6 if (index > 1) {
1296 39 0 if ( ((!SvROK(a)) || (SvTYPE(SvRV(a)) != SVt_PVAV)) ||
39 0 if ( ((!SvROK(a)) || (SvTYPE(SvRV(a)) != SVt_PVAV)) ||
1297 39 0 ((!SvROK(b)) || (SvTYPE(SvRV(b)) != SVt_PVAV)) )
0 39 ((!SvROK(b)) || (SvTYPE(SvRV(b)) != SVt_PVAV)) )
1303 3 36 if (alen != blen)
1305 184 30 for (i = 0; i <= alen; i++) {
1311 184 0 if (!iva || !ivb) return -1;
0 184 if (!iva || !ivb) return -1;
1315 3 181 if (!SvOK(sva) && !SvOK(svb)) /* Two undefs are fine. */
2 1 if (!SvOK(sva) && !SvOK(svb)) /* Two undefs are fine. */
1317 181 1 if (!SvOK(sva) || !SvOK(svb)) /* One undef isn't ok. */
0 181 if (!SvOK(sva) || !SvOK(svb)) /* One undef isn't ok. */
1320 181 0 if (SvTYPE(sva) >= SVt_PVAV || SvTYPE(svb) >= SVt_PVAV)
0 181 if (SvTYPE(sva) >= SVt_PVAV || SvTYPE(svb) >= SVt_PVAV)
1324 29 152 if ( (SvROK(sva) && !sv_isobject(sva)) ||
8 21 if ( (SvROK(sva) && !sv_isobject(sva)) ||
1325 9 151 (SvROK(svb) && !sv_isobject(svb)) ) {
1 8 (SvROK(svb) && !sv_isobject(svb)) ) {
1327 21 1 if ( (SvROK(sva) && SvTYPE(SvRV(sva)) != SVt_PVAV) ||
20 1 if ( (SvROK(sva) && SvTYPE(SvRV(sva)) != SVt_PVAV) ||
1328 21 0 (SvROK(svb) && SvTYPE(SvRV(svb)) != SVt_PVAV) )
0 21 (SvROK(svb) && SvTYPE(SvRV(svb)) != SVt_PVAV) )
1331 1 20 if (SvROK(sva) != SvROK(svb))
1335 20 0 if (res == 1) continue;
1340 117 42 if ( SVNUMTEST(sva) && SVNUMTEST(svb)
116 1 if ( SVNUMTEST(sva) && SVNUMTEST(svb)
1341 0 116 && (SvTYPE(sva) == SVt_IV || SvTYPE(sva) == SVt_PVIV)
0 0 && (SvTYPE(sva) == SVt_IV || SvTYPE(sva) == SVt_PVIV)
1342 0 116 && (SvTYPE(svb) == SVt_IV || SvTYPE(svb) == SVt_PVIV) ) {
0 0 && (SvTYPE(svb) == SVt_IV || SvTYPE(svb) == SVt_PVIV) ) {
1344 1 115 if (va != vb) return 0;
1353 42 1 if (alen != blen || strcmp(stra,strb) != 0)
1 41 if (alen != blen || strcmp(stra,strb) != 0)
1371 103 39 for (i = 0; i < k; i++)
1373 6 33 if (derangement && k >= 2) { /* Make derangements start deranged */
4 2 if (derangement && k >= 2) { /* Make derangements start deranged */
1374 19 4 for (i = 0; i < k; i++)
1375 11 8 cm[k-i-1] = (i&1) ? i : i+2;
1376 3 1 if (k & 1) {
1385 15584 6950 if (ix == 0) {
1386 3910 11674 if (cm[0]++ < n) return 0; /* Increment last value */
1387 38811 25 for (i = 1; i < k && cm[i] >= n-i; i++) ; /* Find next index to incr */
27162 11649 for (i = 1; i < k && cm[i] >= n-i; i++) ; /* Find next index to incr */
1388 25 11649 if (i >= k) return 1; /* Done! */
1390 38774 11649 while (i-- > 0) cm[i] = cm[i+1] + 1; /* Set the rest */
1391 1864 5086 } else if (ix == 1) {
1392 8730 6 for (j = 1; j < k && cm[j] > cm[j-1]; j++) ; /* Find last decrease */
3650 5080 for (j = 1; j < k && cm[j] > cm[j-1]; j++) ; /* Find last decrease */
1393 6 5080 if (j >= k) return 1; /* Done! */
1394 1818 5080 for (m = 0; cm[j] > cm[m]; m++) ; /* Find next greater */
1396 2753 5080 for (i = j-1, m = 0; m < i; i--, m++) /* Reverse the end */
1400 5000 5 for (j = 1; j < k && cm[j] > cm[j-1]; j++) ; /* Find last decrease */
2268 2732 for (j = 1; j < k && cm[j] > cm[j-1]; j++) ; /* Find last decrease */
1401 5 2732 if (j >= k) return 1; /* Done! */
1402 1134 2732 for (m = 0; cm[j] > cm[m]; m++) ; /* Find next greater */
1404 536 2196 if (cm[j] == k-j) goto REDERANGE; /* Skip? */
1405 1371 2196 for (i = j-1, m = 0; m < i; i--, m++) /* Reverse the end */
1407 15261 1859 for (i = 0; i < k; i++) /* Check deranged */
1408 337 14924 if (cm[k-i-1]-1 == i)
1410 337 1859 if (i != k) goto REDERANGE;
1440 12120 120 for (i = 0; i <= CINTS; i++) {
1489 12120 120 for (i = 0; i <= CINTS; i++) {
1504 1 10 if (items == 0) {
1506 0 10 } else if (_XS_get_secure()) {
1512 0 11 if (_XS_get_callgmp() >= 42) CALLROOTSUB("_csrand_p");
1519 0 5 if (_XS_get_secure())
1521 1 4 if (items == 0)
1524 0 5 if (_XS_get_callgmp() >= 42) CALLROOTSUB("_srand_p");
1525 0 5 RETVAL = seedval;
1539 110106 10010 RETVAL = ix == 0 ? irand32(MY_CXT.randcxt) : irand64(MY_CXT.randcxt);
112644 7472 RETVAL = ix == 0 ? irand32(MY_CXT.randcxt) : irand64(MY_CXT.randcxt);
1552 2001 4036 if (m != 0) RETVAL *= m;
1561 32 1 RETVAL = newSV(n == 0 ? 1 : n);
1574 2 0 RETVAL = newSV(n == 0 ? 1 : n);
1626 110638 115328 if (status != 0) {
1627 110308 330 SETSVINT(svn, status == 1, n, (IV)n);
1635 1650 113678 if (mask & IFLAG_ABS) {
1638 4639 109039 } else if (mask & IFLAG_POS) {
1639 49 4590 if (!_is_sv_bigint(aTHX_ svn))
1642 867 108172 if (!_is_sv_bigint(aTHX_ svn))
1646 225965 0 RETVAL = TRUE;
1656 10 0 if (MY_CXT.MPUPP != NULL) DISPATCH_VOIDPP();
1687 1405 1833 UV lo = 0, hi, count = 0;
1689 1405 1833 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
0 1405 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
1833 0 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
1690 1832 1 (items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
1832 0 (items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
1691 2416 821 if (lo <= hi) {
1729 849 22 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) {
1759 1001 29 UV lo = 2, hi;
1761 1001 29 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
0 1001 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
29 0 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
1762 29 0 (items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
29 0 (items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
1768 1 1029 if (retok == 0 && HAVE_SUM_PRIMES128) {
1771 1 0 if (retok == 1 && lo > 2) {
0 1 if (retok == 1 && lo > 2) {
1774 0 0 if (count < lo_loc) hicount--;
1777 1 0 if (retok == 1 && hicount > 0)
1 0 if (retok == 1 && hicount > 0)
1780 1029 0 if (retok == 1)
1788 11005 36 UV lo = 2, hi, ret;
1791 11005 36 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
0 11000 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
36 0 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
1792 33 1 (items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
27 0 (items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
1794 11021 6 if (ret) XSRETURN_UV(ret);
1803 0 0 UV lo = 2, hi;
1805 0 0 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
0 0 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
0 0 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
1806 0 0 (items >= 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
0 0 (items >= 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
1807 0 0 if (lo <= hi) {
1808 0 0 int fd = (infd == -1) ? fileno(stdout) : infd;
1835 0 6 RETVAL = ret;
1852 16 36 if ((low <= 2) && (high >= 2)) av_push(av, newSVuv( 2 ));
12 4 if ((low <= 2) && (high >= 2)) av_push(av, newSVuv( 2 ));
1853 20 32 if ((low <= 3) && (high >= 3)) av_push(av, newSVuv( 3 ));
12 8 if ((low <= 3) && (high >= 3)) av_push(av, newSVuv( 3 ));
1854 20 32 if ((low <= 5) && (high >= 5)) av_push(av, newSVuv( 5 ));
8 12 if ((low <= 5) && (high >= 5)) av_push(av, newSVuv( 5 ));
1855 20 32 if (low < 7) low = 7;
1856 36 16 if (low <= high) {
1857 9 27 if (ix == 0) { /* Sieve with primary cache */
1858 9 0 START_DO_FOR_EACH_PRIME(low, high) {
0 9 START_DO_FOR_EACH_PRIME(low, high) {
0 547 START_DO_FOR_EACH_PRIME(low, high) {
0 0 START_DO_FOR_EACH_PRIME(low, high) {
0 0 START_DO_FOR_EACH_PRIME(low, high) {
131 416 START_DO_FOR_EACH_PRIME(low, high) {
0 139 START_DO_FOR_EACH_PRIME(low, high) {
8 131 START_DO_FOR_EACH_PRIME(low, high) {
0 131 START_DO_FOR_EACH_PRIME(low, high) {
0 547 START_DO_FOR_EACH_PRIME(low, high) {
9 538 START_DO_FOR_EACH_PRIME(low, high) {
1861 9 18 } else if (ix == 1) { /* Trial */
1863 538 9 low <= high && low != 0;
538 0 low <= high && low != 0;
1867 9 9 } else if (ix == 2) { /* Erat with private memory */
1869 639 0 START_DO_FOR_EACH_SIEVE_PRIME( sieve, 0, low, high ) {
9 630 START_DO_FOR_EACH_SIEVE_PRIME( sieve, 0, low, high ) {
538 92 START_DO_FOR_EACH_SIEVE_PRIME( sieve, 0, low, high ) {
639 17 START_DO_FOR_EACH_SIEVE_PRIME( sieve, 0, low, high ) {
26 9 START_DO_FOR_EACH_SIEVE_PRIME( sieve, 0, low, high ) {
1873 9 0 } else if (ix == 3) { /* Segment */
1877 9 9 while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) {
1878 560 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
9 551 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
538 13 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
560 14 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
23 9 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
1891 1077 102 UV lo = 0, hi, i;
1893 1077 102 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
0 1073 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
102 0 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
1894 94 1 (items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
90 0 (items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
1896 1089 74 if ((lo <= 2) && (hi >= 2)) av_push(av, newSVuv( 2 ));
1082 7 if ((lo <= 2) && (hi >= 2)) av_push(av, newSVuv( 2 ));
1897 1095 68 if ((lo <= 3) && (hi >= 3)) av_push(av, newSVuv( 3 ));
1082 13 if ((lo <= 3) && (hi >= 3)) av_push(av, newSVuv( 3 ));
1898 1098 65 if ((lo <= 5) && (hi >= 5)) av_push(av, newSVuv( 5 ));
1074 24 if ((lo <= 5) && (hi >= 5)) av_push(av, newSVuv( 5 ));
1899 1099 64 if (lo < 7) lo = 7;
1900 1126 37 if (lo <= hi) {
1901 1106 20 if ( hi-lo <= 10
1902 4 1102 || (hi > 100000000UL && hi-lo <= 330)
4 0 || (hi > 100000000UL && hi-lo <= 330)
1903 2 1104 || (hi > 4000000000UL && hi-lo <= 1500)
1 1 || (hi > 4000000000UL && hi-lo <= 1500)
1905 708 21 for (i = !(lo&1); i <= hi-lo; i += 2)
1906 47 661 if (is_prime(lo+i))
1908 9 1096 } else if (hi < (65536*30) || hi <= get_prime_cache(0,0)) {
0 9 } else if (hi < (65536*30) || hi <= get_prime_cache(0,0)) {
1909 1096 0 START_DO_FOR_EACH_PRIME(lo, hi) {
0 1096 START_DO_FOR_EACH_PRIME(lo, hi) {
0 577961 START_DO_FOR_EACH_PRIME(lo, hi) {
0 0 START_DO_FOR_EACH_PRIME(lo, hi) {
0 0 START_DO_FOR_EACH_PRIME(lo, hi) {
205047 372914 START_DO_FOR_EACH_PRIME(lo, hi) {
162 213660 START_DO_FOR_EACH_PRIME(lo, hi) {
8775 204885 START_DO_FOR_EACH_PRIME(lo, hi) {
162 204885 START_DO_FOR_EACH_PRIME(lo, hi) {
0 577799 START_DO_FOR_EACH_PRIME(lo, hi) {
934 576865 START_DO_FOR_EACH_PRIME(lo, hi) {
1916 12 9 while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) {
1917 307637 0 START_DO_FOR_EACH_SIEVE_PRIME(segment, seg_base, seg_low, seg_high)
9 307628 START_DO_FOR_EACH_SIEVE_PRIME(segment, seg_base, seg_low, seg_high)
307612 16 START_DO_FOR_EACH_SIEVE_PRIME(segment, seg_base, seg_low, seg_high)
307637 18320 START_DO_FOR_EACH_SIEVE_PRIME(segment, seg_base, seg_low, seg_high)
18329 12 START_DO_FOR_EACH_SIEVE_PRIME(segment, seg_base, seg_low, seg_high)
1936 14 8 if ((items == 2 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
0 14 if ((items == 2 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
8 0 if ((items == 2 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
1937 6 2 (items >= 3 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
6 0 (items >= 3 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
1940 15 5 if (ix == 0) n = generate_almost_primes(&S, k, lo, hi);
1942 412 20 for (i = 0; i < n; i++)
1944 19 1 if (S != 0) Safefree(S);
1958 54 48 UV lo = 0, hi, i, num, *L;
1960 54 48 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
0 54 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
48 0 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
1961 47 1 (items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
47 0 (items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
1963 52 49 if (ix == 0) { /* Prime power */
1964 51 1 if ((lo <= 2) && (hi >= 2)) av_push(av, newSVuv( 2 ));
50 1 if ((lo <= 2) && (hi >= 2)) av_push(av, newSVuv( 2 ));
1965 51 1 if ((lo <= 3) && (hi >= 3)) av_push(av, newSVuv( 3 ));
49 2 if ((lo <= 3) && (hi >= 3)) av_push(av, newSVuv( 3 ));
1966 51 1 if ((lo <= 4) && (hi >= 4)) av_push(av, newSVuv( 4 ));
48 3 if ((lo <= 4) && (hi >= 4)) av_push(av, newSVuv( 4 ));
1967 51 1 if ((lo <= 5) && (hi >= 5)) av_push(av, newSVuv( 5 ));
47 4 if ((lo <= 5) && (hi >= 5)) av_push(av, newSVuv( 5 ));
1968 16 33 } else if (ix == 1) { /* Twin */
1969 5 11 if ((lo <= 3) && (hi >= 3)) av_push(av, newSVuv( 3 ));
5 0 if ((lo <= 3) && (hi >= 3)) av_push(av, newSVuv( 3 ));
1970 11 5 if ((lo <= 5) && (hi >= 5)) av_push(av, newSVuv( 5 ));
11 0 if ((lo <= 5) && (hi >= 5)) av_push(av, newSVuv( 5 ));
1971 18 15 } else if (ix == 2) { /* Semi */
1972 6 12 if ((lo <= 4) && (hi >= 4)) av_push(av, newSVuv( 4 ));
6 0 if ((lo <= 4) && (hi >= 4)) av_push(av, newSVuv( 4 ));
1973 7 11 if ((lo <= 6) && (hi >= 6)) av_push(av, newSVuv( 6 ));
7 0 if ((lo <= 6) && (hi >= 6)) av_push(av, newSVuv( 6 ));
1974 15 0 } else if (ix == 3) { /* Ramanujan */
1975 4 11 if ((lo <= 2) && (hi >= 2)) av_push(av, newSVuv( 2 ));
4 0 if ((lo <= 2) && (hi >= 2)) av_push(av, newSVuv( 2 ));
1977 75 26 if (lo < 7) lo = 7;
1978 95 6 if (lo <= hi) {
1986 964 95 for (i = 0; i < num; i++)
1999 206 1 UV lo = 0, hi, i, nlucky = 0;
2001 206 1 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
0 206 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
1 0 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
2002 1 0 (items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
1 0 (items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
2004 206 1 if (lo == 0 && hi <= UVCONST(4000000000)) {
206 0 if (lo == 0 && hi <= UVCONST(4000000000)) {
2006 45716 206 for (i = 0; i < nlucky; i++)
2011 6 1 for (i = 0; i < nlucky; i++)
2026 79 1 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) {
2027 41 38 if (ix == 0) {
2029 9 32 if (res == 0) XSRETURN_UNDEF;
2043 38 0 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS) == 1) {
2044 0 38 if (GIMME_V != G_ARRAY)
2047 9 29 if (L == 0) XSRETURN_EMPTY;
2048 29 0 EXTEND(SP, (EXTEND_TYPE)npairs);
0 29 EXTEND(SP, (EXTEND_TYPE)npairs);
2049 113 29 for (i = 0; i < npairs; i++)
2060 1 9 UV lo = 1, hi, i, npowerful, *powerful;
2062 1 9 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
0 1 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
9 0 if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) ||
2063 9 0 (items >= 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
9 0 (items >= 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) {
2066 101 10 for (i = 0; i < npowerful; i++)
2082 10 0 if (status == 1) {
2083 0 10 if ((n+width) < n) {
2086 4 6 for (i = (n<2)?2-n:0; i < width; i++)
1610 10 for (i = (n<2)?2-n:0; i < width; i++)
2087 316 1294 if (is_rough(n+i, (depth+1) >= (n+i) ? n+i : depth+1))
2088 0 316 XPUSHs(sv_2mortal(newSVuv( i )));
2091 0 10 if (status != 1) {
2104 0 41 if (items > 100) croak("sieve_prime_cluster: too many entries");
2106 215 41 for (i = 1; i < nc; i++) {
2107 0 215 if (!_validate_and_set(&cval, aTHX_ ST(1+i), IFLAG_POS))
2109 0 215 if (cval & 1) croak("sieve_prime_cluster: values must be even");
2110 0 215 if (cval > 2147483647UL) croak("sieve_prime_cluster: values must be 31-bit");
2111 0 215 if (cval <= cl[i-1]) croak("sieve_prime_cluster: values must be increasing");
2118 32 0 if (list != 0) {
2120 32 0 EXTEND(SP, (EXTEND_TYPE)nprimes);
1 31 EXTEND(SP, (EXTEND_TYPE)nprimes);
2121 12276 32 for (i = 0; i < nprimes; i++)
2126 9 32 if (!done) {
2140 14813 124 if (status == 1) {
2141 4 14809 if (n < 3) {
2143 14608 201 } else if (ix == 2 && !(n&1)) {
7031 7577 } else if (ix == 2 && !(n&1)) {
2145 2055 5723 } else if (items == 1) {
2146 4 2051 ret = (ix == 0) ? is_pseudoprime(n, 2) :
2147 36 2015 (ix == 1) ? is_euler_pseudoprime(n, 2) :
2150 10747 1502 for (i = 1, ret = 1; i < items && ret == 1; i++) {
6526 4221 for (i = 1, ret = 1; i < items && ret == 1; i++) {
2152 0 6526 if (status != 1) break;
2153 100 6426 ret = (ix == 0) ? is_pseudoprime(n, base) :
2154 73 6353 (ix == 1) ? is_euler_pseudoprime(n, base) :
2159 14811 126 if (status != 0) RETURN_NPARITY(ret);
14811 0 if (status != 0) RETURN_NPARITY(ret);
14811 0 if (status != 0) RETURN_NPARITY(ret);
2187 48475 1244 if (status == 1) {
2204 0 2284 case 15: ret = is_mersenne_prime(n); if (ret == -1) status = 0; break;
2208 48643 1076 if (status != 0) RETURN_NPARITY(ret);
48643 0 if (status != 0) RETURN_NPARITY(ret);
48643 0 if (status != 0) RETURN_NPARITY(ret);
2228 1066160 1 if (status == 1) {
2230 14 6 case 0: if (items == 1) k = 0;
2232 24 25 case 1: if (items == 1) k = 1;
2234 1062628 3463 case 2: if (items == 1) k = 10;
2236 0 1066091 if (ret < 0) status = 0; break;
2240 1066160 1 if (status != 0) RETURN_NPARITY(ret);
1066160 0 if (status != 0) RETURN_NPARITY(ret);
1066160 0 if (status != 0) RETURN_NPARITY(ret);
2251 28 0 if (status != 0)
2252 28 0 RETURN_NPARITY((status == 1) ? is_frobenius_pseudoprime(n, P, Q) : 0);
28 0 RETURN_NPARITY((status == 1) ? is_frobenius_pseudoprime(n, P, Q) : 0);
28 0 RETURN_NPARITY((status == 1) ? is_frobenius_pseudoprime(n, P, Q) : 0);
2263 1 7 if (bases < 0) croak("miller_rabin_random: expected positive number of bases");
2265 0 6 if (status == -1) RETURN_NPARITY(0);
0 0 if (status == -1) RETURN_NPARITY(0);
0 0 if (status == -1) RETURN_NPARITY(0);
2266 6 0 if (seed == 0 && status == 1)
4 2 if (seed == 0 && status == 1)
2267 4 0 RETURN_NPARITY( is_mr_random(MY_CXT.randcxt, n, bases) );
4 0 RETURN_NPARITY( is_mr_random(MY_CXT.randcxt, n, bases) );
2277 2 5 if (a == 0) RETURN_NPARITY( ((b % 4) == 3) ? 2*is_prime(b) : 0 );
1 1 if (a == 0) RETURN_NPARITY( ((b % 4) == 3) ? 2*is_prime(b) : 0 );
2 0 if (a == 0) RETURN_NPARITY( ((b % 4) == 3) ? 2*is_prime(b) : 0 );
2 0 if (a == 0) RETURN_NPARITY( ((b % 4) == 3) ? 2*is_prime(b) : 0 );
2278 2 3 if (b == 0) RETURN_NPARITY( ((a % 4) == 3) ? 2*is_prime(a) : 0 );
1 1 if (b == 0) RETURN_NPARITY( ((a % 4) == 3) ? 2*is_prime(a) : 0 );
2 0 if (b == 0) RETURN_NPARITY( ((a % 4) == 3) ? 2*is_prime(a) : 0 );
2 0 if (b == 0) RETURN_NPARITY( ((a % 4) == 3) ? 2*is_prime(a) : 0 );
2279 3 0 if (a < HALF_WORD && b < HALF_WORD) {
3 0 if (a < HALF_WORD && b < HALF_WORD) {
2281 3 0 if (UV_MAX-aa >= bb)
2282 3 0 RETURN_NPARITY( 2*is_prime(aa+bb) );
3 0 RETURN_NPARITY( 2*is_prime(aa+bb) );
2302 63054 16 if (ix == 2 || ix == 3) {
129 62925 if (ix == 2 || ix == 3) {
2305 2 143 if (items == 0) XSRETURN_UNDEF;
2306 62 81 if (items == 1) XSRETURN(1);
2307 81 0 if (items > 1 && (status = _validate_and_set(&ret, aTHX_ ST(0), IFLAG_ANY))) {
75 6 if (items > 1 && (status = _validate_and_set(&ret, aTHX_ ST(0), IFLAG_ANY))) {
2309 173 75 for (i = 1; i < items; i++) {
2311 0 173 if (status == 0) break;
2312 21 152 if (( (sign == -1 && status == 1) ||
15 6 if (( (sign == -1 && status == 1) ||
83 90 if (( (sign == -1 && status == 1) ||
2313 102 65 (n >= ret && sign == status)
92 10 (n >= ret && sign == status)
2321 75 6 if (status != 0) {
2325 4706 58219 } else if (ix == 4) {
2328 202706 4688 for (ret = i = 0; i < items; i++) {
2330 18 202688 if (status == 0) break;
2331 202605 83 if (status == 1) hi += (n > (UV_MAX - lo));
2335 4688 18 if (status != 0 && hi != 0) {
15 4673 if (status != 0 && hi != 0) {
2336 12 3 if (hi == -1 && lo > IV_MAX) XSRETURN_IV((IV)lo);
8 4 if (hi == -1 && lo > IV_MAX) XSRETURN_IV((IV)lo);
2340 470 57749 } else if (ix == 5) {
2343 2660 140 for (i = 0; i < items; i++) {
2345 100 2560 if (status == 0) break;
2346 2560 0 if (ret > 0 && n > UV_MAX/ret) { status = 0; break; }
230 2330 if (ret > 0 && n > UV_MAX/ret) { status = 0; break; }
2350 5 465 if (sign == -1 && status != 0) {
2 3 if (sign == -1 && status != 0) {
2351 0 2 if (ret <= (UV)IV_MAX) XSRETURN_IV(neg_iv(ret));
2356 57714 35 if (ix == 0) { ret = 0; nullv = 1; }
2358 111046 42900 for (i = 0; i < items && ret != nullv && status != 0; i++) {
101192 9854 for (i = 0; i < items && ret != nullv && status != 0; i++) {
101190 2 for (i = 0; i < items && ret != nullv && status != 0; i++) {
2360 4993 96197 if (status == 0) break;
2361 53267 42930 if (i == 0) {
2365 42883 47 if (ix == 0) {
2369 43 4 if (n <= (UV_MAX / ret) ) ret *= n;
2375 57563 5353 if (status != 0)
2378 5350 3 if ((ix == 2 || ix == 3) && !sv_isobject(ST(0))) {
3 5347 if ((ix == 2 || ix == 3) && !sv_isobject(ST(0))) {
2 4 if ((ix == 2 || ix == 3) && !sv_isobject(ST(0))) {
2385 2 2 for (i = 1; i < items; i++) {
2387 2 0 if (strnum_minmax(minmax, aptr, alen, bptr, blen)) {
2397 361 4990 if (ix == 0 || ix == 1) objectify_result(aTHX_ 0, ST(0));
7 354 if (ix == 0 || ix == 1) objectify_result(aTHX_ 0, ST(0));
2404 2 0 UV mask, i = 0;
2406 2 0 CHECK_ARRAYREF(x);
0 2 CHECK_ARRAYREF(x);
2408 1 1 if (SvROK(svm) && SvTYPE(SvRV(svm)) == SVt_PVAV) {
1 0 if (SvROK(svm) && SvTYPE(SvRV(svm)) == SVt_PVAV) {
2411 1 0 USE_ARREF(mav, svm, SUBNAME, AR_READ);
0 1 USE_ARREF(mav, svm, SUBNAME, AR_READ);
0 1 USE_ARREF(mav, svm, SUBNAME, AR_READ);
2412 5 1 for (j = 0; (Size_t)j < len_mav; j++) {
2414 0 5 if (_validate_and_set(&mask, aTHX_ v, IFLAG_IV) == 0)
2417 5 0 { SV **v = av_fetch(av, index, 0); if (v) XPUSHs(*v); }
0 5 { SV **v = av_fetch(av, index, 0); if (v) XPUSHs(*v); }
2419 1 0 } else if (_validate_and_set(&mask, aTHX_ svm, IFLAG_POS)) {
2420 24 1 while (mask) {
2421 13 11 if (mask & 1) {
2423 13 0 if (v) XPUSHs(*v);
0 13 if (v) XPUSHs(*v);
2439 1 18 if (res == -1)
2441 18 0 RETURN_NPARITY(res);
18 0 RETURN_NPARITY(res);
2455 8 146 if (ix == 0) {
2462 2 152 if (items == 0)
2465 579 152 for (i = 0; i < items; i++) {
2468 577 2 if (status == 1 && n-min < (UV)items)
493 84 if (status == 1 && n-min < (UV)items)
2471 321 6 for (i = 0; i < items; i++)
2472 146 175 if (setv[i] == 0)
2484 1 66 if (items == 0) XSRETURN_UNDEF;
2486 439 64 for (i = 0; i < items; i++) {
2487 0 439 if (!_validate_and_set(&n, aTHX_ ST(i), IFLAG_POS | IFLAG_NONZERO)) break;
2488 2 437 if (n == 1) { found1 = 1; break; }
2491 64 2 if (i == items) {
2494 1 62 if (fn == 0) XSRETURN_UNDEF;
2495 60 2 if (fn != UV_MAX) XSRETURN_UV(fn);
2498 2 0 if (found1) XSRETURN_IV(-1);
2518 140 58 for (i = 0; i < items; i++) {
2520 140 0 CHECK_ARRAYREF(ST(i));
0 140 CHECK_ARRAYREF(ST(i));
2522 0 140 if (av_count(av) != 2) croak("%s: expected 2-element array reference",SUBNAME);
2525 140 0 if (psva == 0 || psvn == 0) { status = 0; break; }
0 140 if (psva == 0 || psvn == 0) { status = 0; break; }
2526 66 74 if (i == 0) svfirstmod = *psvn;
2529 140 0 if (astatus == 0 || nstatus == 0) { status = 0; break; }
0 140 if (astatus == 0 || nstatus == 0) { status = 0; break; }
2530 10 130 if (an[i+items] == 0) {
2531 0 10 XPUSHs(&PL_sv_undef);
2532 5 5 if (ix == 1) XPUSHs(&PL_sv_undef);
0 5 if (ix == 1) XPUSHs(&PL_sv_undef);
2537 58 0 if (status)
2540 46 12 if (status) {
2541 23 23 if (ix == 0) {
2542 2 21 if (status < 0) XSRETURN_UNDEF;
2545 2 21 if (status < 0) {
2546 0 2 XPUSHs(&PL_sv_undef);
2547 0 2 XPUSHs(&PL_sv_undef);
2549 0 21 XPUSHs(sv_2mortal(newSVuv( ret )));
2550 0 21 XPUSHs(sv_2mortal(newSVuv( lcm )));
2556 7 5 if (ix == 0) objectify_result(aTHX_ svfirstmod, ST(0));
2565 1 14 if (!cornacchia(&x, &y, d, n)) XSRETURN_UNDEF;
2577 0 0 if (items != 4) croak("lucas_sequence: n, P, Q, k");
2579 0 0 _validate_and_set(&P, aTHX_ ST(1), IFLAG_ANY | IFLAG_IV) &&
2580 0 0 _validate_and_set(&Q, aTHX_ ST(2), IFLAG_ANY | IFLAG_IV) &&
2588 0 0 OBJECTIFY_STACK(3);
0 0 OBJECTIFY_STACK(3);
0 0 OBJECTIFY_STACK(3);
0 0 OBJECTIFY_STACK(3);
0 0 OBJECTIFY_STACK(3);
2602 26705 3 if ((pstatus != 0) && (qstatus != 0) &&
2603 26692 3 _validate_and_set(&k, aTHX_ svk, IFLAG_POS) &&
2606 0 26692 if (n == 0) XSRETURN_UNDEF;
2607 26677 15 P = (pstatus == 1) ? P % n : ivmod((IV)P,n);
2608 235 26457 Q = (qstatus == 1) ? Q % n : ivmod((IV)Q,n);
2620 3 13 OBJECTIFY_STACK(ix==0 ? 2 : 1);
19 0 OBJECTIFY_STACK(ix==0 ? 2 : 1);
4 15 OBJECTIFY_STACK(ix==0 ? 2 : 1);
0 4 OBJECTIFY_STACK(ix==0 ? 2 : 1);
19 16 OBJECTIFY_STACK(ix==0 ? 2 : 1);
0 16 OBJECTIFY_STACK(ix==0 ? 2 : 1);
2621 3 13 XSRETURN(ix==0 ? 2 : 1);
2633 693 0 _validate_and_set((UV*)&Q, aTHX_ svq, IFLAG_IV) &&
2634 621 72 _validate_and_set(&k, aTHX_ svk, IFLAG_POS) &&
2636 289 332 if (ix == 1) XSRETURN_IV(U); /* U = lucasu(P,Q,k) */
2637 242 90 if (ix == 2) XSRETURN_IV(V); /* V = lucasv(P,Q,k) */
2642 26 52 OBJECTIFY_STACK(ix==0 ? 2 : 1);
104 0 OBJECTIFY_STACK(ix==0 ? 2 : 1);
18 86 OBJECTIFY_STACK(ix==0 ? 2 : 1);
0 18 OBJECTIFY_STACK(ix==0 ? 2 : 1);
104 78 OBJECTIFY_STACK(ix==0 ? 2 : 1);
0 78 OBJECTIFY_STACK(ix==0 ? 2 : 1);
2643 26 52 XSRETURN(ix==0 ? 2 : 1);
2653 298 1 if (status != 0) {
2661 298 0 RETURN_NPARITY(ret);
298 0 RETURN_NPARITY(ret);
2684 59577 196 if (status == 1) {
2698 184 12 } else if (status == -1) {
2705 59761 12 if (status != 0) RETURN_NPARITY(ret);
59761 0 if (status != 0) RETURN_NPARITY(ret);
59761 0 if (status != 0) RETURN_NPARITY(ret);
2715 1 8 if (status == -1)
2717 8 0 if (status == 1)
2732 98 116839 if (status == -1) {
2734 2 96 if (ix == 2)
2737 116927 8 if (status != 0) {
2745 111277 5650 if (ix == 0)
2746 111277 0 RETURN_NPARITY(res);
111277 0 RETURN_NPARITY(res);
2747 1013 4637 if (res != 0 || n == 0)
21 992 if (res != 0 || n == 0)
2762 1122 0 if (status != 0) {
2763 0 1122 if (status == -1)
2765 1115 7 if (ix == 0) {
2769 7 0 if (n == 0 || k < 2)
0 7 if (n == 0 || k < 2)
2772 7 0 if (res != 0)
2789 10500 289 if (status != 0) {
2790 61 10439 if (k != 0) {
2791 14 47 if (status == -1) {
2792 2 12 if (k % 2 == 0) RETURN_NPARITY(0); /* negative n even k return 0 */
2 0 if (k % 2 == 0) RETURN_NPARITY(0); /* negative n even k return 0 */
2 0 if (k % 2 == 0) RETURN_NPARITY(0); /* negative n even k return 0 */
2797 61 10378 if (status == -1)
2800 10406 33 ret = (n <= 1) ? 0 : powerof_ret(n, &root);
2801 61 10378 if (status == -1 && ret > 0 && ret % 2 == 0) {
51 10 if (status == -1 && ret > 0 && ret % 2 == 0) {
27 24 if (status == -1 && ret > 0 && ret % 2 == 0) {
2804 11 16 if (ret == 1) ret = 0;
2805 16 11 if (ret) root = ipow(root,1U << v);
2808 199 10299 if (ret && svroot != 0) {
29 170 if (ret && svroot != 0) {
2809 0 29 if (!SvROK(svroot)) croak("is_power: third argument not a scalar reference");
2810 11 18 SETSVINT(SvRV(svroot), status == 1, root, -(IV)root);
2812 10498 0 RETURN_NPARITY(ret);
10498 0 RETURN_NPARITY(ret);
2824 10549 10 if (status != 0) {
2825 10549 0 ret = (status == 1) ? prime_power(n, &root) : 0;
2826 2894 7655 if (ret && svroot != 0) {
14 2880 if (ret && svroot != 0) {
2827 0 14 if (!SvROK(svroot))croak("is_prime_power: second argument not a scalar reference");
2830 10549 0 RETURN_NPARITY(ret);
10549 0 RETURN_NPARITY(ret);
2841 12652 12653 if (svroot != 0 && !SvROK(svroot))
0 12652 if (svroot != 0 && !SvROK(svroot))
2843 0 25305 if (k < 3)
2847 1 25304 if (status == -1)
2848 1 0 RETURN_NPARITY(0);
1 0 RETURN_NPARITY(0);
2849 25302 2 if (status == 1) {
2852 25301 1 UV result = (n == 0) || root;
461 24840 UV result = (n == 0) || root;
2853 25302 0 if (!overflow) {
2854 462 24840 if (result && svroot != 0)
232 230 if (result && svroot != 0)
2856 25302 0 RETURN_NPARITY(result);
25302 0 RETURN_NPARITY(result);
2867 53 0 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) {
2868 53 0 if (n < MPU_MAX_PRIME_IDX) /* Fall through to Perl if out of range. */
2876 0 4 RETVAL = ld_inverse_li(x);
2888 256 0 if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) &&
2889 255 1 n <= MPU_MAX_PRIME_IDX ) {
2890 2 253 if (n == 0) XSRETURN_UNDEF;
2911 193 0 if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) &&
2912 193 0 n <= MPU_MAX_PRIME_IDX ) {
2913 4 189 if (n == 0) XSRETURN_UNDEF;
2934 181 0 if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) &&
2935 180 1 n <= MPU_MAX_PERFECT_POW_IDX ) {
2936 0 180 if (n == 0) XSRETURN_UNDEF;
2958 225 0 if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) &&
2959 225 0 n <= MPU_MAX_RMJN_PRIME_IDX ) {
2960 0 225 if (n == 0) XSRETURN_UNDEF;
2979 63 0 if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) &&
2980 63 0 n <= MPU_MAX_TWIN_PRIME_IDX ) {
2981 1 62 if (n == 0) XSRETURN_UNDEF;
2982 53 9 switch (ix) {
2998 2677 0 if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) &&
2999 2677 0 n <= MPU_MAX_SEMI_PRIME_IDX ) {
3000 1 2676 if (n == 0) XSRETURN_UNDEF;
3001 2672 4 switch (ix) {
3019 516 0 if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) &&
3020 516 0 n <= MPU_MAX_LUCKY_IDX ) {
3021 4 512 if (n == 0) XSRETURN_UNDEF;
3041 12484 18 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)
3042 8735 3749 && !(ix == 0 && n >= MPU_MAX_PRIME)) {
8731 4 && !(ix == 0 && n >= MPU_MAX_PRIME)) {
3049 5 12475 if (ret == 0) XSRETURN_UNDEF;
3062 110 0 if (_validate_and_set(&n, aTHX_ svn, IFLAG_ABS)
3063 54 56 && !(ix == 0 && n >= MPU_MAX_PRIME)) {
54 0 && !(ix == 0 && n >= MPU_MAX_PRIME)) {
3070 4 106 if (ret == 0) XSRETURN_UNDEF;
3082 49 18 if (status == 1) {
3084 48 1 if (n != 0) XSRETURN_UV(n);
3085 17 1 } else if (status == -1) { /* next perfect power: negative n */
3099 48 24 if (status == 1) {
3100 3 45 if (n == 0) XSRETURN_IV(-1);
3103 17 7 } else if (status == -1) { /* prev perfect power: negative n */
3105 17 0 if (n > 0 && n <= (UV)IV_MAX)
16 1 if (n > 0 && n <= (UV)IV_MAX)
3116 36 0 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) {
3118 36 0 if (ret != 0) XSRETURN_UV(ret);
3151 117 844 if (minarg > 0 && bits < minarg)
8 109 if (minarg > 0 && bits < minarg)
3154 920 33 if (bits <= BITS_PER_WORD) {
3168 4 916 if (res || ix == 0) XSRETURN_UV(res);
1 3 if (res || ix == 0) XSRETURN_UV(res);
3170 3 33 DISPATCHPP_GMPONLYIF(ix != 1 || bits != uvmax_maxlen);
2 1 DISPATCHPP_GMPONLYIF(ix != 1 || bits != uvmax_maxlen);
3178 305 23 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) {
3194 346 2 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) {
3202 61 285 if (r != 0 || n == 0)
1 60 if (r != 0 || n == 0)
3213 1 0 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS | IFLAG_NONZERO)) {
3220 3 1 for (f = 0; f < nf; f++)
3221 0 3 av_push(av, newSVuv(F[flip ? nf-1-f : f]));
3222 0 1 XPUSHs(sv_2mortal(newSVuv( r )));
3223 0 1 XPUSHs(sv_2mortal(newRV_noinc( (SV*) av )));
3238 38 15 if (nstatus == 1 && _validate_and_set(&den, aTHX_ svden, IFLAG_POS | IFLAG_NONZERO)) {
38 0 if (nstatus == 1 && _validate_and_set(&den, aTHX_ svden, IFLAG_POS | IFLAG_NONZERO)) {
3241 38 0 EXTEND(SP, (EXTEND_TYPE)steps);
0 38 EXTEND(SP, (EXTEND_TYPE)steps);
3242 280 38 for (i = 0; i < steps; i++)
3261 52 1 if (items > 0) {
3265 433 13 for (i = 1; nstatus == 1 && i < (size_t) items; i++) {
398 35 for (i = 1; nstatus == 1 && i < (size_t) items; i++) {
3266 1 397 if (!_validate_and_set(&n, aTHX_ ST(i), IFLAG_POS | IFLAG_NONZERO))
3269 396 1 overflow = (UV_MAX/n < cfA1) || (UV_MAX/n < cfB1);
1 395 overflow = (UV_MAX/n < cfA1) || (UV_MAX/n < cfB1);
3270 2 395 if (overflow) break;
3273 395 0 overflow = (UV_MAX-cfAn < cfA0) || (UV_MAX-cfBn < cfB0);
1 394 overflow = (UV_MAX-cfAn < cfA0) || (UV_MAX-cfBn < cfB0);
3274 1 394 if (overflow) break;
3280 13 39 if (i < (size_t) items) /* Covers overflow */
3283 36 17 if (nstatus == 1) {
3284 0 36 XPUSHs(sv_2mortal(newSVuv( cfA1 )));
3285 0 36 XPUSHs(sv_2mortal(newSVuv( cfB1 )));
3298 198 0 if (_validate_and_set(&num, aTHX_ svnum, IFLAG_POS | IFLAG_NONZERO) && _validate_and_set(&den, aTHX_ svden, IFLAG_POS | IFLAG_NONZERO)) {
198 0 if (_validate_and_set(&num, aTHX_ svnum, IFLAG_POS | IFLAG_NONZERO) && _validate_and_set(&den, aTHX_ svden, IFLAG_POS | IFLAG_NONZERO)) {
3304 198 0 if (status) {
3305 0 198 XPUSHs(sv_2mortal(newSVuv( num )));
3306 0 198 XPUSHs(sv_2mortal(newSVuv( den )));
3319 220 0 if (_validate_and_set(&num, aTHX_ svnum, IFLAG_POS | IFLAG_NONZERO) && _validate_and_set(&den, aTHX_ svden, IFLAG_POS | IFLAG_NONZERO)) {
220 0 if (_validate_and_set(&num, aTHX_ svnum, IFLAG_POS | IFLAG_NONZERO) && _validate_and_set(&den, aTHX_ svden, IFLAG_POS | IFLAG_NONZERO)) {
3325 214 6 if (n) XSRETURN_UV(n);
3337 214 6 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS | IFLAG_NONZERO)) {
3343 214 0 if (status) {
3344 0 214 XPUSHs(sv_2mortal(newSVuv( num )));
3345 0 214 XPUSHs(sv_2mortal(newSVuv( den )));
3356 340 0 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS))
3367 128 23 if (wantsingle) {
3368 0 128 if (!_validate_and_set(&k, aTHX_ svk, IFLAG_POS))
3371 151 0 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS | IFLAG_NONZERO)) {
3372 23 128 if (!wantsingle && GIMME_V != G_ARRAY)
13 10 if (!wantsingle && GIMME_V != G_ARRAY)
3374 138 0 if (n <= UVCONST(4294967295)) {
3375 128 10 if (wantsingle) {
3378 9 119 if (kresult == 0) XSRETURN_UNDEF;
3379 119 0 if (kresult == 1) {
3386 10 0 if (len > 0) {
3387 10 0 EXTEND(SP, (EXTEND_TYPE)len);
0 10 EXTEND(SP, (EXTEND_TYPE)len);
3388 114 10 for (i = 0; i < len; i++)
3410 1009 0 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS | IFLAG_NONZERO) &&
3411 1009 0 n <= UVCONST(4294967295)) {
3412 1009 0 CHECK_ARRAYREF(svfrac);
0 1009 CHECK_ARRAYREF(svfrac);
3414 0 1009 if (av_count(av) != 2) croak("%s: expected 2-element array reference", SUBNAME);
3418 1009 0 if (psvp == 0 || psvq == 0)
0 1009 if (psvp == 0 || psvq == 0)
3420 1009 0 if (status != 0)
3422 1009 0 if (status != 0)
3424 1009 0 if (status != 0 && p64 >= q64) {
22 987 if (status != 0 && p64 >= q64) {
3425 11 11 if (ix == 0) XSRETURN_UNDEF;
3428 987 0 if (status != 0) {
3430 987 0 if (p != p64 || q != q64)
0 987 if (p != p64 || q != q64)
3433 987 0 if (status != 0) {
3434 110 877 if (ix == 1)
3437 877 0 if (next_farey(n, &p, &q)) {
3460 0 1001 const NV pival = 3.141592653589793238462643383279502884197169;
3463 1 1000 if (digits == 0) {
3465 15 985 } else if (digits <= mantsize) {
3481 114 0 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS) != 0) {
3482 60 54 if (ix == 0) {
3484 41 19 if (bernfrac(&num, &den, n)) {
3485 0 41 XPUSHs(sv_2mortal(newSViv( num )));
3486 0 41 XPUSHs(sv_2mortal(newSVuv( den )));
3491 52 2 if (harmfrac(&num, &den, n)) {
3492 0 52 XPUSHs(sv_2mortal(newSVuv( num )));
3493 0 52 XPUSHs(sv_2mortal(newSVuv( den )));
3499 42 0 OBJECTIFY_STACK(2);
28 14 OBJECTIFY_STACK(2);
0 28 OBJECTIFY_STACK(2);
42 21 OBJECTIFY_STACK(2);
0 21 OBJECTIFY_STACK(2);
3507 0 972 if (digits <= 0) XSRETURN_EMPTY;
3509 0 972 XPUSHs(sv_2mortal(newSVpvn(out, digits+1)));
3520 114 0 if (status == 1) {
3521 104 10 if (gimme_v == G_SCALAR) {
3523 10 0 } else if (gimme_v == G_ARRAY) {
3525 10 0 if (ntotients != UV_MAX) {
3526 10 0 EXTEND(SP, (EXTEND_TYPE)ntotients);
0 10 EXTEND(SP, (EXTEND_TYPE)ntotients);
3527 45 10 for (i = 0; i < ntotients; i++)
3549 1618 131 if (status == 1) {
3550 1031 587 if (ix == 0) {
3553 341 690 if (gimme_v == G_SCALAR)
3555 0 690 EXTEND(SP, (EXTEND_TYPE)nfactors);
3556 1471 690 for (i = 0; i < nfactors; i++)
3560 12 575 if (gimme_v == G_SCALAR)
3562 0 575 EXTEND(SP, (EXTEND_TYPE)nf.nfactors);
3563 1316 575 for (i = 0; i < nf.nfactors; i++)
3578 973 8 if (status == 1 && svk != 0) {
9 964 if (status == 1 && svk != 0) {
3580 2 7 if (k > n) k = n;
3582 8 973 if (status != 1) {
3586 973 0 if (GIMME_V == G_VOID) {
3588 21 952 } else if (GIMME_V == G_SCALAR && k >= n) {
21 0 } else if (GIMME_V == G_SCALAR && k >= n) {
3593 0 952 if (GIMME_V == G_SCALAR) {
3596 952 0 EXTEND(SP, (EXTEND_TYPE)ndivisors);
1 951 EXTEND(SP, (EXTEND_TYPE)ndivisors);
3597 5831 952 for (i = 0; i < ndivisors; i++)
3622 113 87 if (!_validate_and_set(&n, aTHX_ svn, IFLAG_POS) || ix == 10) {
0 113 if (!_validate_and_set(&n, aTHX_ svn, IFLAG_POS) || ix == 10) {
3626 0 113 if (n == 0) XSRETURN_UV(0);
3628 10 103 arg1 = (items >= 2) ? my_svuv(ST(1)) : default_arg1[ix];
3629 1 112 arg2 = (items >= 3) ? my_svuv(ST(2)) : 0;
3631 0 62 while ( (n% 2) == 0 ) { n /= 2; XPUSHs(sv_2mortal(newSVuv( 2 ))); }
62 113 while ( (n% 2) == 0 ) { n /= 2; XPUSHs(sv_2mortal(newSVuv( 2 ))); }
3632 0 60 while ( (n% 3) == 0 ) { n /= 3; XPUSHs(sv_2mortal(newSVuv( 3 ))); }
60 113 while ( (n% 3) == 0 ) { n /= 3; XPUSHs(sv_2mortal(newSVuv( 3 ))); }
3633 0 81 while ( (n% 5) == 0 ) { n /= 5; XPUSHs(sv_2mortal(newSVuv( 5 ))); }
81 113 while ( (n% 5) == 0 ) { n /= 5; XPUSHs(sv_2mortal(newSVuv( 5 ))); }
3634 63 50 if (n == 1) { /* done */ }
3635 33 30 else if (is_prime(n)) { XPUSHs(sv_2mortal(newSVuv( n ))); }
0 33 else if (is_prime(n)) { XPUSHs(sv_2mortal(newSVuv( n ))); }
3648 2 0 case 8: if (items < 3) arg2 = 1;
3651 5 1 default: if (items < 3) arg2 = 10*arg1;
3654 30 0 EXTEND(SP, (EXTEND_TYPE)nfactors);
0 30 EXTEND(SP, (EXTEND_TYPE)nfactors);
3655 59 30 for (i = 0; i < nfactors; i++)
3665 92 2328 if (items == 1) {
3666 91 1 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) {
3668 88 3 if (n <= 1 || sigma != 0)
88 0 if (n <= 1 || sigma != 0)
3673 918 1410 if ( (!SvROK(svk) || (SvROK(svk) && SvTYPE(SvRV(svk)) != SVt_PVCV)) &&
918 0 if ( (!SvROK(svk) || (SvROK(svk) && SvTYPE(SvRV(svk)) != SVt_PVCV)) &&
3674 1408 0 _validate_and_set(&n, aTHX_ svn, IFLAG_POS) &&
3677 1047 361 if (n <= 1 || sigma != 0)
1047 0 if (n <= 1 || sigma != 0)
3698 12289 1 if (astatus != 0 && nstatus != 0) {
2 12287 if (astatus != 0 && nstatus != 0) {
3701 22 468 if (ret == 0 && n > 1)
22 0 if (ret == 0 && n > 1)
3705 22 10779 if (ret == 0 && a > 0)
12 10 if (ret == 0 && a > 0)
3708 901 1 case 2: if (a < 1 || n < 1) XSRETURN_IV(0);
1 900 case 2: if (a < 1 || n < 1) XSRETURN_IV(0);
3712 676 224 if (m == 0 || a == g) RETURN_NPARITY(m);
391 285 if (m == 0 || a == g) RETURN_NPARITY(m);
615 0 if (m == 0 || a == g) RETURN_NPARITY(m);
615 0 if (m == 0 || a == g) RETURN_NPARITY(m);
3739 97 0 k < BITS_PER_WORD) {
3765 22 2 k < BITS_PER_WORD) {
3767 22 0 if (n == 0 || (k == 0 && n > 1)) XSRETURN_UNDEF;
0 22 if (n == 0 || (k == 0 && n > 1)) XSRETURN_UNDEF;
0 0 if (n == 0 || (k == 0 && n > 1)) XSRETURN_UNDEF;
3769 22 0 if (max > 0 && n <= max) {
21 1 if (max > 0 && n <= max) {
3776 21 0 if (ret != 0) XSRETURN_UV(ret);
3788 216 0 k < 16) {
3789 205 11 if (n == 0 || (k == 0 && n > 1)) XSRETURN_UNDEF;
4 201 if (n == 0 || (k == 0 && n > 1)) XSRETURN_UNDEF;
3 1 if (n == 0 || (k == 0 && n > 1)) XSRETURN_UNDEF;
3791 202 0 if (max > 0 && n <= max) {
202 0 if (max > 0 && n <= max) {
3810 817 47 if (astatus != 0 && gstatus != 0 && nstatus != 0) {
643 174 if (astatus != 0 && gstatus != 0 && nstatus != 0) {
527 116 if (astatus != 0 && gstatus != 0 && nstatus != 0) {
3811 45 482 if (n == 0) XSRETURN_UNDEF;
3812 44 438 if (n == 1) XSRETURN_UV(0);
3815 328 110 if (ix == 0) {
3817 313 15 if (!retundef) ret = powmod(a, g, n);
3819 108 2 retundef = !(prep_pow_inv(&a,&g,gstatus,n) && rootmod(&ret,a,g,n));
38 70 retundef = !(prep_pow_inv(&a,&g,gstatus,n) && rootmod(&ret,a,g,n));
3821 55 383 if (retundef) XSRETURN_UNDEF;
3841 22087 5472 if (astatus != 0 && bstatus != 0 && nstatus != 0) {
21496 591 if (astatus != 0 && bstatus != 0 && nstatus != 0) {
14870 6626 if (astatus != 0 && bstatus != 0 && nstatus != 0) {
3842 112 14758 if (n == 0) XSRETURN_UNDEF;
3843 114 14644 if (n == 1) XSRETURN_UV(0);
3852 28 80 if (b == 0) retundef = 1;
3856 5 17 if (ret == 0 && (b == 0 || a != 1)) retundef = 1;
5 0 if (ret == 0 && (b == 0 || a != 1)) retundef = 1;
3 2 if (ret == 0 && (b == 0 || a != 1)) retundef = 1;
3860 31 14613 if (retundef) XSRETURN_UNDEF;
3878 26375 18689 if (astatus != 0 && bstatus != 0 && cstatus != 0 && nstatus != 0) {
25907 468 if (astatus != 0 && bstatus != 0 && cstatus != 0 && nstatus != 0) {
25855 52 if (astatus != 0 && bstatus != 0 && cstatus != 0 && nstatus != 0) {
16774 9081 if (astatus != 0 && bstatus != 0 && cstatus != 0 && nstatus != 0) {
3879 0 16774 if (n == 0) XSRETURN_UNDEF;
3880 0 16774 if (n == 1) XSRETURN_UV(0);
3884 13102 3672 ret = (ix==0) ? muladdmod(a,b,c,n) : mulsubmod(a,b,c,n);
3899 22167 1 if (nstatus != 0 && kstatus != 0 && mstatus != 0) {
22167 0 if (nstatus != 0 && kstatus != 0 && mstatus != 0) {
22167 0 if (nstatus != 0 && kstatus != 0 && mstatus != 0) {
3900 0 22167 if (m == 0) XSRETURN_UNDEF;
3901 820 21347 if (m == 1) XSRETURN_UV(0);
3902 21344 3 if ( (nstatus == 1 && (kstatus == -1 || k > n)) ||
21343 1 if ( (nstatus == 1 && (kstatus == -1 || k > n)) ||
21341 2 if ( (nstatus == 1 && (kstatus == -1 || k > n)) ||
3 21341 if ( (nstatus == 1 && (kstatus == -1 || k > n)) ||
3903 1 2 (nstatus ==-1 && (kstatus == -1 && k > n)) )
0 1 (nstatus ==-1 && (kstatus == -1 && k > n)) )
3905 1 21343 if (kstatus == -1) k = n - k;
3906 3 21341 if (nstatus == -1) n = neg_iv(n) + k - 1;
3907 21344 0 if (binomialmod(&ret, n, k, m)) {
3908 3 21341 if ((nstatus == -1) && (k & 1) && ret != 0) ret = m-ret;
1 2 if ((nstatus == -1) && (k & 1) && ret != 0) ret = m-ret;
1 0 if ((nstatus == -1) && (k & 1) && ret != 0) ret = m-ret;
3922 824 1 if (astatus != 0 && nstatus != 0) {
823 1 if (astatus != 0 && nstatus != 0) {
3923 0 823 if (n == 0) XSRETURN_UNDEF;
3924 1 822 if (n == 1) XSRETURN_UV(0);
3942 384 19 if (astatus != 0 && nstatus != 0) {
269 115 if (astatus != 0 && nstatus != 0) {
3943 11 258 if (n == 0) XSRETURN_UNDEF;
3944 13 245 if (n == 1) XSRETURN_UV((ix==1) ? 1 : 0); /* znorder different */
3954 24 221 if (retok == 0) XSRETURN_UNDEF;
3968 36 2 if (astatus != 0 && nstatus != 0) {
36 0 if (astatus != 0 && nstatus != 0) {
3969 2 34 if (n == 0) XSRETURN_EMPTY;
3972 27 7 if (roots != 0) {
3973 0 27 if (GIMME_V != G_ARRAY) {
3976 27 0 EXTEND(SP, (EXTEND_TYPE)numr);
0 27 EXTEND(SP, (EXTEND_TYPE)numr);
3977 80 27 for (i = 0; i < numr; i++)
3995 51 1 if (astatus != 0 && gstatus != 0 && nstatus != 0) {
51 0 if (astatus != 0 && gstatus != 0 && nstatus != 0) {
50 1 if (astatus != 0 && gstatus != 0 && nstatus != 0) {
3996 1 49 if (n == 0) XSRETURN_EMPTY;
3998 2 47 if (!prep_pow_inv(&a,&g,gstatus,n)) XSRETURN_EMPTY;
4000 36 11 if (roots != 0) {
4001 0 36 if (GIMME_V != G_ARRAY) {
4004 36 0 EXTEND(SP, (EXTEND_TYPE)numr);
0 36 EXTEND(SP, (EXTEND_TYPE)numr);
4005 224 36 for (i = 0; i < numr; i++)
4022 39 0 if (astatus != 0 && nstatus != 0) {
33 6 if (astatus != 0 && nstatus != 0) {
4023 1 32 if (n == 0) XSRETURN_UNDEF;
4025 32 0 RETURN_NPARITY( is_primitive_root(a,n,0) );
32 0 RETURN_NPARITY( is_primitive_root(a,n,0) );
4036 64 7 if (_validate_and_set(&n, aTHX_ svn, IFLAG_ABS)) {
4037 1 63 if (n == 0) XSRETURN_UNDEF;
4038 35 28 if (ix == 0) {
4042 4 24 if (r == 0 && n != 1) XSRETURN_UNDEF;
3 1 if (r == 0 && n != 1) XSRETURN_UNDEF;
4044 57 3 if (r < 100) RETURN_NPARITY(r);
57 0 if (r < 100) RETURN_NPARITY(r);
57 0 if (r < 100) RETURN_NPARITY(r);
4060 590 593 RETURN_NPARITY( (ix == 0) ? is_smooth(n,k) : is_rough(n,k) );
1183 0 RETURN_NPARITY( (ix == 0) ? is_smooth(n,k) : is_rough(n,k) );
1183 0 RETURN_NPARITY( (ix == 0) ? is_smooth(n,k) : is_rough(n,k) );
4075 11281 0 if (kstatus != 0 && nstatus != 0) {
11277 4 if (kstatus != 0 && nstatus != 0) {
4077 11277 0 : (ix == 0) ? is_omega_prime(k, n)
4078 615 10662 : is_almost_prime(k, n);
4079 11277 0 RETURN_NPARITY(res);
11277 0 RETURN_NPARITY(res);
4092 43 450292 ret = d==0 ? (n==0) : n % d == 0;
4093 9 450335 for (i = 2; i < (size_t)items && !ret; i++) {
9 0 for (i = 2; i < (size_t)items && !ret; i++) {
4094 0 9 if ((status = _validate_and_set(&d, aTHX_ ST(i), IFLAG_ABS)) != 1)
4096 0 9 ret = d==0 ? (n==0) : n % d == 0;
4098 450335 0 if (status == 1) RETURN_NPARITY(ret);
450335 0 if (status == 1) RETURN_NPARITY(ret);
450335 0 if (status == 1) RETURN_NPARITY(ret);
4111 40048 6 if (nstatus != 0 && cstatus != 0 && dstatus != 0) {
40048 0 if (nstatus != 0 && cstatus != 0 && dstatus != 0) {
40048 0 if (nstatus != 0 && cstatus != 0 && dstatus != 0) {
4112 40010 38 if (d != 0) {
4116 40048 0 RETURN_NPARITY( n == c );
40048 0 RETURN_NPARITY( n == c );
4127 0 134 if (k <= 1) croak("valuation: k must be > 1");
4128 1 133 if (n == 0) XSRETURN_UNDEF;
4129 133 0 RETURN_NPARITY(valuation(n, k));
133 0 RETURN_NPARITY(valuation(n, k));
4141 381 1292 UV n, ret, k = 2;
4144 1667 6 if (nstatus != 0 && (!svk || _validate_and_set(&k, aTHX_ svk, IFLAG_POS))) {
1288 379 if (nstatus != 0 && (!svk || _validate_and_set(&k, aTHX_ svk, IFLAG_POS))) {
1288 0 if (nstatus != 0 && (!svk || _validate_and_set(&k, aTHX_ svk, IFLAG_POS))) {
4145 55 1612 if (nstatus == -1) RETURN_NPARITY(0);
55 0 if (nstatus == -1) RETURN_NPARITY(0);
55 0 if (nstatus == -1) RETURN_NPARITY(0);
4146 1233 379 if (ix == 0) RETURN_NPARITY( is_powerful(n, k) );
1233 0 if (ix == 0) RETURN_NPARITY( is_powerful(n, k) );
1233 0 if (ix == 0) RETURN_NPARITY( is_powerful(n, k) );
4147 193 186 if (ix == 1) XSRETURN_UV( powerful_count(n, k) );
4148 182 4 if (ix == 2) {
4149 3 179 if (n == 0) XSRETURN_UV(0);
4152 1 3 if (n == 0) XSRETURN_UNDEF;
4156 178 4 if (ret > 0) XSRETURN_UV(ret);
4170 478 6 if (astatus != 0 && bstatus != 0) {
166 312 if (astatus != 0 && bstatus != 0) {
4172 154 12 if (bstatus == 1)
4173 146 8 k = (astatus==1) ? kronecker_uu(a,b) : kronecker_su((IV)a,b);
4175 8 4 k = (astatus==1) ? kronecker_uu(a,neg_iv(b)) : -kronecker_su((IV)a,neg_iv(b));
4176 166 0 RETURN_NPARITY( k );
166 0 RETURN_NPARITY( k );
4188 101 2 if (astatus != 0 && nstatus != 0) {
101 0 if (astatus != 0 && nstatus != 0) {
4189 1 100 if (n == 0) XSRETURN_UNDEF;
4190 6 94 if (n == 1) RETURN_NPARITY(1);
6 0 if (n == 1) RETURN_NPARITY(1);
6 0 if (n == 1) RETURN_NPARITY(1);
4192 94 0 RETURN_NPARITY( is_qr(a,n) );
94 0 RETURN_NPARITY( is_qr(a,n) );
4210 100588 722066 bstatus = _validate_and_set(&b, aTHX_ svb, (ix == 7) ? IFLAG_POS : IFLAG_ANY);
4212 786453 36201 if (astatus != 0 && bstatus != 0) {
784845 1608 if (astatus != 0 && bstatus != 0) {
4218 182840 602005 smask = ((astatus == -1) << 1) + (bstatus == -1);
4221 1988 782857 if (b == 0 && (ix==3 || ix==4 || ix==5))
1986 2 if (b == 0 && (ix==3 || ix==4 || ix==5))
1984 2 if (b == 0 && (ix==3 || ix==4 || ix==5))
2 1982 if (b == 0 && (ix==3 || ix==4 || ix==5))
4224 273751 511088 if (smask != 0) { /* Manipulate so all arguments are positive */
4225 182840 90911 if (smask & 2) a = neg_iv(a);
4226 181020 92731 if (smask & 1) b = neg_iv(b);
4228 239 273512 if (ix == 0) {
4235 804 272708 } else if (ix == 1) {
4242 516 272192 } else if (ix == 2) {
4243 500 16 switch (smask) {
4248 1059 271133 } else if (ix == 3) {
4249 1051 8 switch (smask) {
4254 271093 40 } else if (ix == 4) {
4261 9 31 } else if (ix == 5) {
4262 7 2 switch (smask) {
4267 31 0 } else if (ix == 6) {
4269 31 0 } else if (ix == 7) {
4279 178 656 if (b > a && (IV)ret < 0) XSRETURN_IV((IV)ret);
173 5 if (b > a && (IV)ret < 0) XSRETURN_IV((IV)ret);
4283 105134 17 overflow = a > 0 && UV_MAX/a < b;
6505 98629 overflow = a > 0 && UV_MAX/a < b;
4289 124772 56305 case 6: ret = (a%b) ? b-(a%b) : 0; /* cmodint */
4293 92237 7935 overflow = (a > 1 && ret == UV_MAX);
5631 86606 overflow = (a > 1 && ret == UV_MAX);
4296 772456 12210 if (!overflow) {
4297 590417 182039 if (!postneg)
4299 181987 52 if (ret <= (UV)IV_MAX)
4315 454 1695 if (status == 1) {
4316 92 362 if (ix == 1 && n == 0) XSRETURN_IV(-1);
6 86 if (ix == 1 && n == 0) XSRETURN_IV(-1);
4317 362 86 if (ix == 1 || (ix == 0 && n < UV_MAX))
362 0 if (ix == 1 || (ix == 0 && n < UV_MAX))
359 3 if (ix == 1 || (ix == 0 && n < UV_MAX))
4318 359 86 XSRETURN_UV( (ix==0) ? n+1 : n-1 );
4319 37 1658 } else if (status == -1) {
4320 20 17 if (ix == 0 || (ix == 1 && (IV)n > IV_MIN))
20 0 if (ix == 0 || (ix == 1 && (IV)n > IV_MIN))
20 0 if (ix == 0 || (ix == 1 && (IV)n > IV_MIN))
4321 17 20 XSRETURN_IV( (ix==0) ? (IV)n+1 : (IV)n-1 );
4333 301 2120 if (ix == 0) {
4334 270 31 if (_validate_and_set(&n, aTHX_ svn, IFLAG_ABS))
4338 146 1974 if (status == -1) XSRETURN_UV(neg_iv(n));
4339 435 1539 else if (status == 1) XSRETURN_IV(neg_iv(n));
4356 1584 724 if (status == 0) { /* Look at the string input */
4358 1584 0 if (len == 0 || s == 0) croak("%s: invalid non-empty input", SUBNAME);
0 1584 if (len == 0 || s == 0) croak("%s: invalid non-empty input", SUBNAME);
4359 1569 15 sign = (s[0] == '-') ? -1 : (s[0] == '0') ? 0 : 1;
4360 1521 63 isodd = (s[len-1] == '1' || s[len-1] == '3' || s[len-1] == '5' || s[len-1] == '7' || s[len-1] == '9');
1475 46 isodd = (s[len-1] == '1' || s[len-1] == '3' || s[len-1] == '5' || s[len-1] == '7' || s[len-1] == '9');
1436 39 isodd = (s[len-1] == '1' || s[len-1] == '3' || s[len-1] == '5' || s[len-1] == '7' || s[len-1] == '9');
1359 77 isodd = (s[len-1] == '1' || s[len-1] == '3' || s[len-1] == '5' || s[len-1] == '7' || s[len-1] == '9');
68 1291 isodd = (s[len-1] == '1' || s[len-1] == '3' || s[len-1] == '5' || s[len-1] == '7' || s[len-1] == '9');
4362 510 214 sign = (status == -1) ? -1 : (n == 0) ? 0 : 1;
4365 2047 261 RETURN_NPARITY( (ix==0) ? sign : (ix==1) ? isodd : !isodd );
1655 392 RETURN_NPARITY( (ix==0) ? sign : (ix==1) ? isodd : !isodd );
2308 0 RETURN_NPARITY( (ix==0) ? sign : (ix==1) ? isodd : !isodd );
2308 0 RETURN_NPARITY( (ix==0) ? sign : (ix==1) ? isodd : !isodd );
4374 146 144 if (astatus != 0 && bstatus != 0) {
123 23 if (astatus != 0 && bstatus != 0) {
4375 18 105 if (astatus > bstatus) ret = 1;
4376 25 80 else if (astatus < bstatus) ret = -1;
4377 18 62 else if (a == b) ret = 0;
4378 57 5 else ret = ((astatus == 1 && a > b) || (astatus == -1 && (IV)a > (IV)b)) ? 1 : -1;
31 26 else ret = ((astatus == 1 && a > b) || (astatus == -1 && (IV)a > (IV)b)) ? 1 : -1;
5 31 else ret = ((astatus == 1 && a > b) || (astatus == -1 && (IV)a > (IV)b)) ? 1 : -1;
2 3 else ret = ((astatus == 1 && a > b) || (astatus == -1 && (IV)a > (IV)b)) ? 1 : -1;
4386 290 0 RETURN_NPARITY(ret);
290 0 RETURN_NPARITY(ret);
4394 1271 34022 if (ix == 0 && k <= 1) croak("logint: base must be > 1");
2 1269 if (ix == 0 && k <= 1) croak("logint: base must be > 1");
4395 34022 1269 if (ix == 1 && k <= 0) croak("rootint: k must be > 0");
1 34021 if (ix == 1 && k <= 0) croak("rootint: k must be > 0");
4396 4408 30882 if (svret != 0 && !SvROK(svret))
0 4408 if (svret != 0 && !SvROK(svret))
4398 1269 34021 if (_validate_and_set(&n, aTHX_ svn, ix == 0 ? IFLAG_POS | IFLAG_NONZERO : IFLAG_POS)) {
31300 3987 if (_validate_and_set(&n, aTHX_ svn, ix == 0 ? IFLAG_POS | IFLAG_NONZERO : IFLAG_POS)) {
4399 886 30414 root = (ix == 0) ? logint(n, k) : rootint(n, k);
4400 1331 29969 if (svret) sv_setuv(SvRV(svret), ix == 0 ? ipow(k,root) : ipow(root,k));
1 1330 if (svret) sv_setuv(SvRV(svret), ix == 0 ? ipow(k,root) : ipow(root,k));
4419 770 215 if (astatus != 0 && bstatus != 0 && d == 0)
770 0 if (astatus != 0 && bstatus != 0 && d == 0)
8 762 if (astatus != 0 && bstatus != 0 && d == 0)
4421 705 272 if (astatus == 1 && bstatus == 1 && (ix != 2 || D % d == 0)) {
690 15 if (astatus == 1 && bstatus == 1 && (ix != 2 || D % d == 0)) {
11 679 if (astatus == 1 && bstatus == 1 && (ix != 2 || D % d == 0)) {
2 9 if (astatus == 1 && bstatus == 1 && (ix != 2 || D % d == 0)) {
4422 0 681 XPUSHs(sv_2mortal(newSVuv( D / d )));
4423 0 681 XPUSHs(sv_2mortal(newSVuv( D % d )));
4425 35 261 } else if (ix == 2 && astatus == 1 && bstatus == 1 && d <= (UV)IV_MAX) {
13 22 } else if (ix == 2 && astatus == 1 && bstatus == 1 && d <= (UV)IV_MAX) {
9 4 } else if (ix == 2 && astatus == 1 && bstatus == 1 && d <= (UV)IV_MAX) {
8 1 } else if (ix == 2 && astatus == 1 && bstatus == 1 && d <= (UV)IV_MAX) {
4427 0 8 XPUSHs(sv_2mortal(newSVuv( D/d + 1 )));
4428 0 8 XPUSHs(sv_2mortal(newSViv( ((IV)D%d) - d )));
4430 73 215 } else if (astatus != 0 && bstatus != 0 &&
4431 72 1 _validate_and_set((UV*)&iD, aTHX_ sva, IFLAG_IV) != 0 &&
4442 0 72 XPUSHs(sv_2mortal(newSViv( q )));
4443 0 72 XPUSHs(sv_2mortal(newSViv( r )));
4447 432 0 OBJECTIFY_STACK(2);
235 197 OBJECTIFY_STACK(2);
0 235 OBJECTIFY_STACK(2);
432 216 OBJECTIFY_STACK(2);
0 216 OBJECTIFY_STACK(2);
4459 2710 1755 if (items == 1) {
4464 96 1659 if (kstatus == -1) {
4469 4465 0 if (kstatus != 0) {
4471 57 4408 if (k == 0)
4473 1995 2413 if (nstatus != 0 && nix > 0 && k >= BITS_PER_WORD) /* Big right shift */
738 1257 if (nstatus != 0 && nix > 0 && k >= BITS_PER_WORD) /* Big right shift */
114 624 if (nstatus != 0 && nix > 0 && k >= BITS_PER_WORD) /* Big right shift */
4474 22 92 XSRETURN_IV(nstatus == -1 && nix==2 ? -1 : 0);
13 9 XSRETURN_IV(nstatus == -1 && nix==2 ? -1 : 0);
4475 1691 2603 if (nstatus == 1 && k < BITS_PER_WORD) {
954 737 if (nstatus == 1 && k < BITS_PER_WORD) {
4476 565 389 if (nix > 0) XSRETURN_UV(n >> k); /* Right shift */
4477 226 163 if ( ((n << k) >> k) == n) XSRETURN_UV(n << k); /* Left shift */
4479 190 3150 } else if (nstatus == -1 && nix > 0 && k < BITS_PER_WORD) {
59 131 } else if (nstatus == -1 && nix > 0 && k < BITS_PER_WORD) {
59 0 } else if (nstatus == -1 && nix > 0 && k < BITS_PER_WORD) {
4482 41 18 XSRETURN_IV( nix == 1 ? -nk : (nk<
3 15 XSRETURN_IV( nix == 1 ? -nk : (nk<
4483 131 3150 } else if (nstatus == -1 && nix == 0 && k+1 < BITS_PER_WORD) {
131 0 } else if (nstatus == -1 && nix == 0 && k+1 < BITS_PER_WORD) {
130 1 } else if (nstatus == -1 && nix == 0 && k+1 < BITS_PER_WORD) {
4486 125 5 if ((nk << 1) >> (k+1) == n)
4503 0 12 XPUSHs(sv_2mortal(newSViv( u )));
4504 0 12 XPUSHs(sv_2mortal(newSViv( v )));
4505 0 12 XPUSHs(sv_2mortal(newSViv( d )));
4508 6 0 OBJECTIFY_STACK(3);
4 2 OBJECTIFY_STACK(3);
0 4 OBJECTIFY_STACK(3);
6 2 OBJECTIFY_STACK(3);
0 2 OBJECTIFY_STACK(3);
4515 640 254 if (type != 1 && type != 2 && type != 3)
253 387 if (type != 1 && type != 2 && type != 3)
1 252 if (type != 1 && type != 2 && type != 3)
4517 70 823 if (n == m)
4519 820 3 else if (n == 0 || m == 0 || m > n)
760 60 else if (n == 0 || m == 0 || m > n)
60 700 else if (n == 0 || m == 0 || m > n)
4521 190 510 else if (type == 3) {
4523 185 5 if (s != 0) XSRETURN_UV(s);
4524 318 192 } else if (type == 2) {
4526 209 109 if (s != 0) XSRETURN_IV(s);
4527 192 0 } else if (type == 1) {
4529 145 47 if (s != 0) XSRETURN_IV(s);
4545 108 0 nv = !SvROK(x) ? SvNV(x) : STRTONV(SvPV_nolen(x));
4554 102 6 RETVAL = ret;
4567 28271 93 mask = (ix == 1 && items == 1) ? IFLAG_ABS : IFLAG_ANY;
28241 30 mask = (ix == 1 && items == 1) ? IFLAG_ABS : IFLAG_ANY;
4569 28316 48 if (svhi == 0 && lostatus != 0) {
28297 19 if (svhi == 0 && lostatus != 0) {
4570 74 28223 if (ix == 0) XSRETURN_UV( (lostatus == -1) ? 0 : totient(lo) );
73 1 if (ix == 0) XSRETURN_UV( (lostatus == -1) ? 0 : totient(lo) );
4571 28223 0 else RETURN_NPARITY( moebius(lo) );
28223 0 else RETURN_NPARITY( moebius(lo) );
4573 48 19 histatus = (svhi == 0) ? 0 : _validate_and_set(&hi, aTHX_ svhi, IFLAG_ANY);
4580 45 22 if (lostatus == 1 && histatus == 1) {
41 4 if (lostatus == 1 && histatus == 1) {
4583 1 40 if (lo > hi) XSRETURN(0);
4585 2 38 if (appendmax) hi--;
4588 40 0 if (count > 0) {
4589 40 0 EXTEND(SP, (EXTEND_TYPE)count);
3 37 EXTEND(SP, (EXTEND_TYPE)count);
4590 14 26 if (ix == 0) {
4591 6 8 UV arrlo = (lo < 100) ? 0 : lo;
4593 371 14 for (i = 0; i < count; i++)
4599 27536 26 for (i = 0; i < count; i++)
4600 27536 0 PUSH_NPARITY(mu[i]);
27536 0 PUSH_NPARITY(mu[i]);
4604 2 38 if (appendmax) {
4605 0 2 EXTEND(SP, 1);
4606 1 1 if (ix == 0) {
4610 1 0 PUSH_NPARITY(-1); /* moebius of 2^32-1, 2^64-1, 2^128-1 => -1 */
1 0 PUSH_NPARITY(-1); /* moebius of 2^32-1, 2^64-1, 2^128-1 => -1 */
4625 65668 46 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) {
4647 37150 23 if (_validate_and_set(&n, aTHX_ svn, IFLAG_ABS)) {
4656 37150 0 RETURN_NPARITY(ret);
37150 0 RETURN_NPARITY(ret);
4658 3 20 if (ix == 2 && _XS_get_callgmp() < 47) {
3 0 if (ix == 2 && _XS_get_callgmp() < 47) {
4675 1320 0 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) {
4686 1273 47 if (n == 0 || r > 0) XSRETURN_UV(r);
855 418 if (n == 0 || r > 0) XSRETURN_UV(r);
4687 0 418 if (ix == 5) { /* Probably an overflow, try 128-bit. */
4690 0 0 if (retok == 1 && hicount > 0)
0 0 if (retok == 1 && hicount > 0)
4692 0 0 if (retok == 1)
4707 3568 10 if (nstatus != 0 && kstatus != 0) {
3568 0 if (nstatus != 0 && kstatus != 0) {
4708 3201 367 if ( (nstatus == 1 && (kstatus == -1 || k > n)) ||
3074 127 if ( (nstatus == 1 && (kstatus == -1 || k > n)) ||
3017 57 if ( (nstatus == 1 && (kstatus == -1 || k > n)) ||
367 3017 if ( (nstatus == 1 && (kstatus == -1 || k > n)) ||
4709 138 229 (nstatus ==-1 && (kstatus == -1 && k > n)) )
57 81 (nstatus ==-1 && (kstatus == -1 && k > n)) )
4711 81 3246 if (kstatus == -1)
4713 310 3017 if (nstatus == -1) {
4715 245 65 if (ret > 0 && ret <= (UV)IV_MAX)
245 0 if (ret > 0 && ret <= (UV)IV_MAX)
4716 111 134 XSRETURN_IV( (IV)ret * ((k&1) ? -1 : 1) );
4717 3017 0 } else if (nstatus == 1) {
4719 2900 117 if (ret != 0) XSRETURN_UV(ret);
4722 117 75 DISPATCHPP_GMPONLYIF(nstatus == 1 && kstatus != 0);
117 0 DISPATCHPP_GMPONLYIF(nstatus == 1 && kstatus != 0);
4735 252 230 if (nstatus == 1 && kstatus == 1) {
252 0 if (nstatus == 1 && kstatus == 1) {
4736 126 126 UV ret = (ix==0) ? falling_factorial(n,k) : rising_factorial(n,k);
4737 248 4 if (ret != UV_MAX) XSRETURN_UV(ret);
4738 220 10 } else if (nstatus == -1 && kstatus == 1) {
220 0 } else if (nstatus == -1 && kstatus == 1) {
4740 110 110 IV ret = (ix==0) ? falling_factorial_s(in,k) : rising_factorial_s(in,k);
4741 220 0 if (ret != IV_MAX) XSRETURN_IV(ret);
4759 1374 84 status = _validate_and_set(&n, aTHX_ svn, (ix < 5) ? IFLAG_POS : IFLAG_ANY);
4760 1 1457 if (status == -1)
4762 1455 2 if (status == 1) {
4772 5 5 if (r == 0 && n != 0)
4 1 if (r == 0 && n != 0)
4777 1451 4 if (status != 0) RETURN_NPARITY(r);
1390 61 if (status != 0) RETURN_NPARITY(r);
1317 73 if (status != 0) RETURN_NPARITY(r);
4801 19 0 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) {
4802 10 9 NV r = (ix==0) ? chebyshev_theta(n) : chebyshev_psi(n);
4831 24 7 if (svb == 0 || atype == IARR_TYPE_BAD) {
0 24 if (svb == 0 || atype == IARR_TYPE_BAD) {
4838 30 1 if (alen == 0 || blen == 0) {
1 29 if (alen == 0 || blen == 0) {
4839 2 0 if (rb != ra) Safefree(rb);
4843 29 0 if (atype == IARR_TYPE_BAD || btype == IARR_TYPE_BAD)
1 28 if (atype == IARR_TYPE_BAD || btype == IARR_TYPE_BAD)
4847 11 18 if (stype == IARR_TYPE_BAD) {
4848 11 0 if (rb != ra) Safefree(rb);
4853 18 0 sign = IARR_TYPE_TO_STATUS(stype);
3 15 sign = IARR_TYPE_TO_STATUS(stype);
4856 125 18 for (i = 0; i < alen; i++)
4857 2676 125 for (j = 0; j < blen; j++)
4859 11 7 if (rb != ra) Safefree(rb);
4861 0 18 RETURN_SET_REF(s);
437 12 RETURN_SET_REF(s);
449 18 RETURN_SET_REF(s);
4873 23 3 if (svb == 0 || atype == IARR_TYPE_BAD) {
0 23 if (svb == 0 || atype == IARR_TYPE_BAD) {
4880 25 1 if (alen == 0 || blen == 0) {
0 25 if (alen == 0 || blen == 0) {
4881 1 0 if (rb != ra) Safefree(rb);
4885 25 0 if (atype != IARR_TYPE_BAD && btype != IARR_TYPE_BAD) {
25 0 if (atype != IARR_TYPE_BAD && btype != IARR_TYPE_BAD) {
4894 0 25 SETSUBREF(subcv, block);
4906 25 0 if (!CvISXSUB(subcv)) {
4910 0 25 PUSH_MULTICALL(subcv);
4911 70 20 for (i = 0; i < alen; i++) {
4912 235 65 for (j = 0; j < blen; j++) {
4913 20 215 FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]);
6 14 FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]);
0 6 FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]);
0 229 FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]);
4914 30 205 FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]);
14 16 FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]);
0 14 FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]);
0 221 FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]);
4915 0 235 SCOPED_MULTICALL;
0 235 SCOPED_MULTICALL;
4917 231 4 if (status != 0) iset_add(&s, ret, status);
4918 231 4 if (status == 0 || iset_is_invalid(s)) break;
230 1 if (status == 0 || iset_is_invalid(s)) break;
4920 5 65 if (j < blen) break;
4923 25 0 POP_MULTICALL;
4928 0 0 for (i = 0; i < alen; i++) {
4929 0 0 for (j = 0; j < blen; j++) {
4931 0 0 FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]);
0 0 FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]);
0 0 FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]);
0 0 FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]);
4932 0 0 FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]);
0 0 FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]);
0 0 FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]);
0 0 FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]);
4933 0 0 PUSHMARK(SP);
4936 0 0 if (status != 0) iset_add(&s, ret, status);
4937 0 0 if (status == 0 || iset_is_invalid(s)) break;
0 0 if (status == 0 || iset_is_invalid(s)) break;
4939 0 0 if (j < blen) break;
4943 21 4 if (status != 0 && !iset_is_invalid(s)) {
20 1 if (status != 0 && !iset_is_invalid(s)) {
4944 17 3 if (rb != ra) Safefree(rb);
4946 0 20 RETURN_SET_REF(s);
80 76 RETURN_SET_REF(s);
156 20 RETURN_SET_REF(s);
4950 5 0 if (rb != ra) Safefree(rb);
4973 14 42 SV **bb = aa ? _check_sorted_nonneg_arrayref(aTHX_ svb, &fb) : NULL;
4974 14 42 if (aa && bb) {
8 6 if (aa && bb) {
4975 6 2 int inc_eq = (ix == 0 || ix == 1); /* union, intersect */
2 4 int inc_eq = (ix == 0 || ix == 1); /* union, intersect */
4977 6 2 int inc_gt = (ix == 0 || ix == 3); /* union, delta */
2 4 int inc_gt = (ix == 0 || ix == 3); /* union, delta */
4978 2 6 size_t maxlen = (ix == 1) ? (fa < fb ? fa : fb) : fa + fb;
4983 24 8 while (ia < fa && ib < fb) {
24 0 while (ia < fa && ib < fb) {
4985 12 12 if (va==vb) {if (inc_eq) ar[rlen++]=SvREFCNT_inc(aa[ia]); ia++; ib++;}
6 6 if (va==vb) {if (inc_eq) ar[rlen++]=SvREFCNT_inc(aa[ia]); ia++; ib++;}
4986 12 0 else if (va< vb) {if (inc_lt) ar[rlen++]=SvREFCNT_inc(aa[ia]); ia++;}
9 3 else if (va< vb) {if (inc_lt) ar[rlen++]=SvREFCNT_inc(aa[ia]); ia++;}
4987 0 0 else {if (inc_gt) ar[rlen++]=SvREFCNT_inc(bb[ib]); ib++;}
4989 6 2 if (inc_lt) while (ia < fa) ar[rlen++] = SvREFCNT_inc(aa[ia++]);
0 6 if (inc_lt) while (ia < fa) ar[rlen++] = SvREFCNT_inc(aa[ia++]);
4990 4 4 if (inc_gt) while (ib < fb) ar[rlen++] = SvREFCNT_inc(bb[ib++]);
8 4 if (inc_gt) while (ib < fb) ar[rlen++] = SvREFCNT_inc(bb[ib++]);
5000 30 18 if (CAN_COMBINE_IARR_TYPES(atype,btype)) {
5003 22 8 int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1;
21 1 int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1;
5005 8 22 if (ix == 0) { /* union */
5006 0 8 New(0, r, alen + blen, UV);
5007 33 7 while (ia < alen && ib < blen) {
32 1 while (ia < alen && ib < blen) {
5008 9 23 if (ra[ia] == rb[ib]) {
5012 3 20 if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) r[rlen++] = ra[ia++];
15 8 if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) r[rlen++] = ra[ia++];
5016 1 7 if (ia < alen) { Copy(ra+ia, r+rlen, alen-ia, UV); rlen += alen-ia; }
0 1 if (ia < alen) { Copy(ra+ia, r+rlen, alen-ia, UV); rlen += alen-ia; }
5017 5 3 if (ib < blen) { Copy(rb+ib, r+rlen, blen-ib, UV); rlen += blen-ib; }
0 5 if (ib < blen) { Copy(rb+ib, r+rlen, blen-ib, UV); rlen += blen-ib; }
5018 7 15 } else if (ix == 1) { /* intersect */
5019 0 7 New(0, r, (alen < blen) ? alen : blen, UV);
5020 28 6 while (ia < alen && ib < blen) {
27 1 while (ia < alen && ib < blen) {
5021 9 18 if (ra[ia] == rb[ib]) {
5025 3 15 if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) ia++;
12 6 if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) ia++;
5029 7 8 } else if (ix == 2) { /* minus (difference) */
5030 0 7 New(0, r, alen, UV);
5031 28 6 while (ia < alen && ib < blen) {
27 1 while (ia < alen && ib < blen) {
5032 9 18 if (ra[ia] == rb[ib]) {
5035 3 15 if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) r[rlen++] = ra[ia++];
12 6 if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) r[rlen++] = ra[ia++];
5039 1 6 if (ia < alen) { Copy(ra+ia, r+rlen, alen-ia, UV); rlen += alen-ia; }
0 1 if (ia < alen) { Copy(ra+ia, r+rlen, alen-ia, UV); rlen += alen-ia; }
5040 8 0 } else if (ix == 3) { /* delta (symmetric difference) */
5041 0 8 New(0, r, alen + blen, UV);
5042 32 7 while (ia < alen && ib < blen) {
31 1 while (ia < alen && ib < blen) {
5043 11 20 if (ra[ia] == rb[ib]) {
5046 5 15 if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) r[rlen++] = ra[ia++];
14 6 if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) r[rlen++] = ra[ia++];
5050 1 7 if (ia < alen) { Copy(ra+ia, r+rlen, alen-ia, UV); rlen += alen-ia; }
0 1 if (ia < alen) { Copy(ra+ia, r+rlen, alen-ia, UV); rlen += alen-ia; }
5051 5 3 if (ib < blen) { Copy(rb+ib, r+rlen, blen-ib, UV); rlen += blen-ib; }
0 5 if (ib < blen) { Copy(rb+ib, r+rlen, blen-ib, UV); rlen += blen-ib; }
5055 40 65 RETURN_LIST_REF(rlen, r, pcmp);
105 30 RETURN_LIST_REF(rlen, r, pcmp);
5082 90 0 if (SvROK(sva) && SvTYPE(SvRV(sva)) == SVt_PVAV && SvROK(svb) && SvTYPE(SvRV(svb)) == SVt_PVAV) {
90 0 if (SvROK(sva) && SvTYPE(SvRV(sva)) == SVt_PVAV && SvROK(svb) && SvTYPE(SvRV(svb)) == SVt_PVAV) {
90 0 if (SvROK(sva) && SvTYPE(SvRV(sva)) == SVt_PVAV && SvROK(svb) && SvTYPE(SvRV(svb)) == SVt_PVAV) {
90 0 if (SvROK(sva) && SvTYPE(SvRV(sva)) == SVt_PVAV && SvROK(svb) && SvTYPE(SvRV(svb)) == SVt_PVAV) {
5086 10 80 if ( (ix == 1 && inalen != inblen) ||
5 5 if ( (ix == 1 && inalen != inblen) ||
29 56 if ( (ix == 1 && inalen != inblen) ||
5087 28 1 (ix == 2 && inalen < inblen) || (ix == 3 && inalen <= inblen) ||
10 74 (ix == 2 && inalen < inblen) || (ix == 3 && inalen <= inblen) ||
4 6 (ix == 2 && inalen < inblen) || (ix == 3 && inalen <= inblen) ||
10 68 (ix == 2 && inalen < inblen) || (ix == 3 && inalen <= inblen) ||
5088 9 1 (ix == 4 && inalen > inblen) || (ix == 5 && inalen >= inblen) )
10 67 (ix == 4 && inalen > inblen) || (ix == 5 && inalen >= inblen) )
6 4 (ix == 4 && inalen > inblen) || (ix == 5 && inalen >= inblen) )
5089 19 0 RETURN_NPARITY(0);
19 0 RETURN_NPARITY(0);
5096 57 14 if (CAN_COMBINE_IARR_TYPES(atype,btype)) {
5098 40 17 int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1;
39 1 int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1;
5100 304 34 while (ia < alen && ib < blen) {
281 23 while (ia < alen && ib < blen) {
5101 207 74 if (ra[ia] == rb[ib]) {
5105 39 35 if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) ia++;
44 30 if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) ia++;
5113 5 3 case 0: if (rlen == 0) ret = 1; break;
5114 4 0 case 1: if (alen == blen && rlen == blen) ret = 1; break;
2 2 case 1: if (alen == blen && rlen == blen) ret = 1; break;
5115 23 0 case 2: if (alen >= blen && rlen == blen) ret = 1; break;
16 7 case 2: if (alen >= blen && rlen == blen) ret = 1; break;
5116 3 0 case 3: if (alen > blen && rlen == blen) ret = 1; break;
2 1 case 3: if (alen > blen && rlen == blen) ret = 1; break;
5117 7 0 case 4: if (alen <= blen && rlen == alen) ret = 1; break;
4 3 case 4: if (alen <= blen && rlen == alen) ret = 1; break;
5118 3 0 case 5: if (alen < blen && rlen == alen) ret = 1; break;
2 1 case 5: if (alen < blen && rlen == alen) ret = 1; break;
5120 4 5 default:if (rlen > 0 && rlen < alen && rlen < blen) ret = 1; break;
3 1 default:if (rlen > 0 && rlen < alen && rlen < blen) ret = 1; break;
2 1 default:if (rlen > 0 && rlen < alen && rlen < blen) ret = 1; break;
5122 57 0 RETURN_NPARITY(ret);
57 0 RETURN_NPARITY(ret);
5140 52 0 CHECK_ARRAYREF(sva); /* First argument is a set as array ref */
0 52 CHECK_ARRAYREF(sva); /* First argument is a set as array ref */
5143 0 52 if (items < 2) RETURN_NPARITY(1);
0 0 if (items < 2) RETURN_NPARITY(1);
0 0 if (items < 2) RETURN_NPARITY(1);
5144 52 0 if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */
0 52 if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */
5149 51 1 if (items == 2 && SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) {
38 13 if (items == 2 && SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) {
33 5 if (items == 2 && SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) {
5151 33 0 USE_ARREF(arb, ST(1), SUBNAME, AR_READ);
0 33 USE_ARREF(arb, ST(1), SUBNAME, AR_READ);
0 33 USE_ARREF(arb, ST(1), SUBNAME, AR_READ);
5153 7 26 if (ix == 1 && len_arb > alen && svarr_arb != 0) {
1 6 if (ix == 1 && len_arb > alen && svarr_arb != 0) {
1 0 if (ix == 1 && len_arb > alen && svarr_arb != 0) {
5156 1 0 USE_ARREF(arb, ST(0), SUBNAME, AR_READ);
0 1 USE_ARREF(arb, ST(0), SUBNAME, AR_READ);
0 1 USE_ARREF(arb, ST(0), SUBNAME, AR_READ);
5159 26 7 subset = ix == 0 && blen > alen ? 0 : findall;
24 2 subset = ix == 0 && blen > alen ? 0 : findall;
5163 64 24 for (i = 0; i < blen && subset == findall; i++) {
55 9 for (i = 0; i < blen && subset == findall; i++) {
5170 14 5 bstatus = IARR_TYPE_TO_STATUS(btype);
5 9 bstatus = IARR_TYPE_TO_STATUS(btype);
5171 14 5 subset = bstatus == 0 ? -1 : ix == 0 && blen > alen ? 0 : findall;
12 2 subset = bstatus == 0 ? -1 : ix == 0 && blen > alen ? 0 : findall;
12 0 subset = bstatus == 0 ? -1 : ix == 0 && blen > alen ? 0 : findall;
5172 19 0 if (blen <= 4) {
5173 22 14 for (i = 0; i < blen && subset == findall; i++)
17 5 for (i = 0; i < blen && subset == findall; i++)
5178 0 0 for (i = 0; i < blen && subset == findall; i++)
0 0 for (i = 0; i < blen && subset == findall; i++)
5183 40 12 if (subset != -1)
5184 40 0 RETURN_NPARITY(subset);
40 0 RETURN_NPARITY(subset);
5196 40 0 CHECK_ARRAYREF(sva); /* First argument is a set as array ref */
0 40 CHECK_ARRAYREF(sva); /* First argument is a set as array ref */
5199 2 38 if (items < 2)
5200 2 0 RETURN_NPARITY(0);
2 0 RETURN_NPARITY(0);
5201 0 38 CHECK_AV_NOT_READONLY(ava); /* We intend to modify it */
5202 38 0 if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */
0 38 if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */
5207 13 25 if (SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) {
13 0 if (SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) {
5208 0 13 if (items != 2)
5214 37 1 bstatus = IARR_TYPE_TO_STATUS(btype);
6 31 bstatus = IARR_TYPE_TO_STATUS(btype);
5216 37 1 if (bstatus != 0 && blen <= 4) {
34 3 if (bstatus != 0 && blen <= 4) {
5219 78 0 for (i = 0; res >= 0 && i < blen; i++) {
44 34 for (i = 0; res >= 0 && i < blen; i++) {
5223 34 0 if (res >= 0) { Safefree(rb); RETURN_NPARITY(nins); }
34 0 if (res >= 0) { Safefree(rb); RETURN_NPARITY(nins); }
34 0 if (res >= 0) { Safefree(rb); RETURN_NPARITY(nins); }
5224 3 1 } else if (bstatus != 0) {
5231 0 3 if (alen == 0) {
5233 0 0 for (i = 0; i < blen; i++)
5234 0 0 av_push(ava, NEWSVINT(bstatus, rb[i]));
5236 0 0 RETURN_NPARITY(blen);
0 0 RETURN_NPARITY(blen);
5240 3 0 if (_sc_set_lohi(aTHX_ AvARRAY(ava), &svcache, 0, alen-1, &alostatus, &ahistatus, &alo, &ahi) >= 0) {
5241 0 3 if (_sign_cmp(alostatus,alo,ahistatus,ahi) > 0)
5246 10 0 while (nbeg < blen && _sign_cmp(bstatus,rb[nbeg],alostatus,alo) < 0)
7 3 while (nbeg < blen && _sign_cmp(bstatus,rb[nbeg],alostatus,alo) < 0)
5249 508 1 while (nend < blen-nbeg && _sign_cmp(bstatus,rb[blen-1-nend],ahistatus,ahi) > 0)
506 2 while (nend < blen-nbeg && _sign_cmp(bstatus,rb[blen-1-nend],ahistatus,ahi) > 0)
5253 2 1 if (nmidcheck > 0) {
5256 0 2 New(0, insert_idx, nmidcheck, size_t);
5257 0 2 New(0, insert_sv, nmidcheck, SV*);
5258 17 0 for (i = nbeg; bstatus != 0 && i < blen-nend; i++) {
15 2 for (i = nbeg; bstatus != 0 && i < blen-nend; i++) {
5260 0 15 if (index < 0)
5262 4 11 if (index > 0) {
5263 0 4 insert_sv[nmid] = NEWSVINT(bstatus,rb[i]);/* Value to insert */
5269 1 1 if (nmid > 0) {
5275 4 1 for (i = 0; i < nmid; i++)
5279 4 1 for (i = 0; i < nmid; i++) {
5283 2 2 if (nmove > 0) {
5296 2 1 if (nbeg > 0) {
5298 7 2 for (i = 0; i < nbeg; i++)
5299 6 1 av_store(ava, i, NEWSVINT(bstatus, rb[i]));
5302 3 0 if (nend > 0) {
5303 506 3 for (i = 0; i < nend; i++)
5304 505 1 av_push(ava, NEWSVINT(bstatus, rb[blen-nend+i]));
5307 3 0 RETURN_NPARITY(nbeg+nmid+nend);
2 1 RETURN_NPARITY(nbeg+nmid+nend);
5322 12 0 CHECK_ARRAYREF(sva); /* First argument is a set as array ref */
0 12 CHECK_ARRAYREF(sva); /* First argument is a set as array ref */
5325 10 2 if (alen == 0 || items < 2)
0 10 if (alen == 0 || items < 2)
5326 2 0 RETURN_NPARITY(0);
2 0 RETURN_NPARITY(0);
5327 0 10 CHECK_AV_NOT_READONLY(ava); /* We intend to modify it */
5328 10 0 if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */
0 10 if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */
5332 7 3 if (SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) {
7 0 if (SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) {
5333 0 7 if (items != 2)
5339 10 0 if (btype != IARR_TYPE_BAD) {
5340 10 0 bstatus = IARR_TYPE_TO_STATUS(btype);
1 9 bstatus = IARR_TYPE_TO_STATUS(btype);
5341 0 10 if (blen <= 5 || alen <= 20) { /* SIMPLE DELETE LOOP */
0 0 if (blen <= 5 || alen <= 20) { /* SIMPLE DELETE LOOP */
5344 25 0 for (i = 0; res >= 0 && i < blen; i++) {
15 10 for (i = 0; res >= 0 && i < blen; i++) {
5346 12 3 if (res > 0) ndel++;
5348 10 0 if (res >= 0) { Safefree(rb); RETURN_NPARITY(ndel); }
10 0 if (res >= 0) { Safefree(rb); RETURN_NPARITY(ndel); }
10 0 if (res >= 0) { Safefree(rb); RETURN_NPARITY(ndel); }
5349 0 0 } else if (blen < 500 || (blen*100) < alen) { /* ONE PASS DELETE */
0 0 } else if (blen < 500 || (blen*100) < alen) { /* ONE PASS DELETE */
5354 0 0 New(0, del_idx, blen, Size_t);
5355 0 0 for (i = 0; i < blen; i++) {
5357 0 0 if (index < 0)
5359 0 0 if (index > 0)
5363 0 0 if (ndel > 0) {
5366 0 0 for (i = 0; i < ndel; i++) {
5369 0 0 size_t len = (i+1) >= ndel ? alen-beg : del_idx[i+1]-beg;
5371 0 0 if (len > 0) {
5376 0 0 Zero(arr + alen - ndel, ndel, SV*);
5380 0 0 RETURN_NPARITY(ndel);
0 0 RETURN_NPARITY(ndel);
5385 0 0 if (CAN_COMBINE_IARR_TYPES(atype,btype)) {
5387 0 0 int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1;
0 0 int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1;
5389 0 0 astatus = IARR_TYPE_TO_STATUS(atype);
0 0 astatus = IARR_TYPE_TO_STATUS(atype);
5391 0 0 while (ia < alen && ib < blen) {
0 0 while (ia < alen && ib < blen) {
5392 0 0 if (ra[ia] == rb[ib]) {
5395 0 0 if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) av_push(ava, NEWSVINT(astatus, ra[ia++]));
0 0 if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) av_push(ava, NEWSVINT(astatus, ra[ia++]));
0 0 if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) av_push(ava, NEWSVINT(astatus, ra[ia++]));
5399 0 0 while (ia < alen) av_push(ava, NEWSVINT(astatus, ra[ia++]));
0 0 while (ia < alen) av_push(ava, NEWSVINT(astatus, ra[ia++]));
5404 0 0 if (del_complete) RETURN_NPARITY(alen - av_count(ava));
0 0 if (del_complete) RETURN_NPARITY(alen - av_count(ava));
0 0 if (del_complete) RETURN_NPARITY(alen - av_count(ava));
5419 12 0 CHECK_ARRAYREF(sva);
0 12 CHECK_ARRAYREF(sva);
5422 2 10 if (items < 2)
5423 2 0 RETURN_NPARITY(0);
2 0 RETURN_NPARITY(0);
5424 0 10 CHECK_AV_NOT_READONLY(ava);
5425 10 0 if (SvMAGICAL(ava) || !AvREAL(ava)) {
0 10 if (SvMAGICAL(ava) || !AvREAL(ava)) {
5429 5 5 if (SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) {
5 0 if (SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) {
5430 0 5 if (items != 2)
5436 10 0 if (btype != IARR_TYPE_BAD) {
5437 2 8 if (blen == 0) {
5439 2 0 RETURN_NPARITY(0);
2 0 RETURN_NPARITY(0);
5441 8 0 bstatus = IARR_TYPE_TO_STATUS(btype);
1 7 bstatus = IARR_TYPE_TO_STATUS(btype);
5442 0 8 if (blen <= 4 || alen <= 20) { /* SIMPLE TOGGLE LOOP */
0 0 if (blen <= 4 || alen <= 20) { /* SIMPLE TOGGLE LOOP */
5445 26 0 for (i = 0; res >= 0 && i < blen; i++) {
18 8 for (i = 0; res >= 0 && i < blen; i++) {
5447 13 5 if (res > 0) { ndelta--; } /* found and removed */
5448 5 0 else if (res == 0) { /* not found, insert */
5450 5 0 if (res > 0) ndelta++;
5453 8 0 if (res >= 0) {
5463 0 0 if (CAN_COMBINE_IARR_TYPES(atype, btype)) {
5465 0 0 int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1;
0 0 int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1;
5466 0 0 astatus = IARR_TYPE_TO_STATUS(atype);
0 0 astatus = IARR_TYPE_TO_STATUS(atype);
5468 0 0 while (ia < alen && ib < blen) {
0 0 while (ia < alen && ib < blen) {
5469 0 0 if (ra[ia] == rb[ib]) { ia++; ib++; }
5470 0 0 else if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) av_push(ava, NEWSVINT(astatus, ra[ia++]));
0 0 else if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) av_push(ava, NEWSVINT(astatus, ra[ia++]));
0 0 else if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) av_push(ava, NEWSVINT(astatus, ra[ia++]));
5471 0 0 else av_push(ava, NEWSVINT(bstatus, rb[ib++]));
5473 0 0 while (ia < alen) av_push(ava, NEWSVINT(astatus, ra[ia++]));
0 0 while (ia < alen) av_push(ava, NEWSVINT(astatus, ra[ia++]));
5474 0 0 while (ib < blen) av_push(ava, NEWSVINT(bstatus, rb[ib++]));
0 0 while (ib < blen) av_push(ava, NEWSVINT(bstatus, rb[ib++]));
5478 0 0 if (done) {
5499 3 16 if (itype == IARR_TYPE_NEG) { /* All elements must be non-negative. */
5501 3 0 RETURN_NPARITY(0);
3 0 RETURN_NPARITY(0);
5504 16 0 if (itype == IARR_TYPE_BAD || itype == IARR_TYPE_POS) {
1 15 if (itype == IARR_TYPE_BAD || itype == IARR_TYPE_POS) {
5512 117 11 for (i = 0; i < len && is_sidon; i++)
113 4 for (i = 0; i < len && is_sidon; i++)
5513 2288 109 for (j = i; j < len; j++)
5514 4 2284 if (!iset_add(&s, data[i] + data[j], 1))
5518 15 0 RETURN_NPARITY(is_sidon);
15 0 RETURN_NPARITY(is_sidon);
5529 35 0 if (itype != IARR_TYPE_BAD && len <= 1) { /* Degenerate cases: len 0 or 1 */
5 30 if (itype != IARR_TYPE_BAD && len <= 1) { /* Degenerate cases: len 0 or 1 */
5530 4 1 is_sumfree = len == 0 || data[0] != 0;
3 1 is_sumfree = len == 0 || data[0] != 0;
5532 5 0 RETURN_NPARITY(is_sumfree);
5 0 RETURN_NPARITY(is_sumfree);
5535 9 21 if (itype == IARR_TYPE_NEG) {
5537 8 1 if (min < IV_MIN/2 || max > IV_MAX/2) itype = IARR_TYPE_BAD;
0 8 if (min < IV_MIN/2 || max > IV_MAX/2) itype = IARR_TYPE_BAD;
5540 20 10 if (itype == IARR_TYPE_ANY) {
5541 60 11 for (i = 0; i < len && is_sumfree; i++)
51 9 for (i = 0; i < len && is_sumfree; i++)
5542 126 42 for (j = i; j < len; j++)
5543 9 117 if (is_in_sorted_uv_array(data[i]+data[j], data, len))
5545 8 2 } else if (itype == IARR_TYPE_NEG) {
5546 19 5 for (i = 0; i < len && is_sumfree; i++)
16 3 for (i = 0; i < len && is_sumfree; i++)
5547 35 13 for (j = i; j < len; j++)
5548 3 32 if (is_in_sorted_iv_array((IV)data[i]+(IV)data[j], (IV*)data, len))
5553 10 20 if (itype == IARR_TYPE_ANY || itype == IARR_TYPE_NEG)
8 2 if (itype == IARR_TYPE_ANY || itype == IARR_TYPE_NEG)
5554 28 0 RETURN_NPARITY(is_sumfree);
28 0 RETURN_NPARITY(is_sumfree);
5572 4 73 if (items == 0) RETURN_EMPTY_SET_REF();
5574 41 32 if (type != IARR_TYPE_BAD)
5575 194 64 RETURN_LIST_REF(len, L, type != IARR_TYPE_NEG);
258 41 RETURN_LIST_REF(len, L, type != IARR_TYPE_NEG);
5588 1 86 if (items == 0)
5590 14 72 if (SvROK(ST(0)) && SvTYPE(SvRV(ST(0))) == SVt_PVAV) {
9 5 if (SvROK(ST(0)) && SvTYPE(SvRV(ST(0))) == SVt_PVAV) {
5591 0 9 if (items != 1)
5597 3 83 if (GIMME_V != G_ARRAY) /* In scalar context, return number of elements */
5599 26 57 if (type == IARR_TYPE_ANY || type == IARR_TYPE_POS) {
5 21 if (type == IARR_TYPE_ANY || type == IARR_TYPE_POS) {
5601 1 20 } else if (type == IARR_TYPE_NEG) {
5608 0 63 RETURN_LIST_VALS( len, L, (type != IARR_TYPE_NEG) );
63 0 RETURN_LIST_VALS( len, L, (type != IARR_TYPE_NEG) );
0 63 RETURN_LIST_VALS( len, L, (type != IARR_TYPE_NEG) );
341 47 RETURN_LIST_VALS( len, L, (type != IARR_TYPE_NEG) );
388 63 RETURN_LIST_VALS( len, L, (type != IARR_TYPE_NEG) );
5619 32 0 CHECK_ARRAYREF(sva);
0 32 CHECK_ARRAYREF(sva);
5621 0 32 CHECK_AV_NOT_READONLY(ava); /* We intend to modify it */
5622 32 0 if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */
0 32 if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */
5632 27 5 if (type == IARR_TYPE_ANY || type == IARR_TYPE_POS) {
2 25 if (type == IARR_TYPE_ANY || type == IARR_TYPE_POS) {
5634 0 25 } else if (type == IARR_TYPE_NEG) {
5642 18 7 for (i = 0; i < len; i++)
5643 11 7 FASTSETSVINT(arr[i], type == IARR_TYPE_POS, L[i]);
5 6 FASTSETSVINT(arr[i], type == IARR_TYPE_POS, L[i]);
5 0 FASTSETSVINT(arr[i], type == IARR_TYPE_POS, L[i]);
8 5 FASTSETSVINT(arr[i], type == IARR_TYPE_POS, L[i]);
5653 1 5 if (n == 0)
5655 5 0 if (n < 32 && _validate_and_set(&k, aTHX_ svk, IFLAG_ABS) == 1) {
5 0 if (n < 32 && _validate_and_set(&k, aTHX_ svk, IFLAG_ABS) == 1) {
5656 5 0 if (num_to_perm(k, n, S)) {
5658 5 0 EXTEND(SP, (EXTEND_TYPE)n);
0 5 EXTEND(SP, (EXTEND_TYPE)n);
5659 45 5 for (i = 0; i < (int)n; i++)
5660 45 0 PUSH_NPARITY( S[i] );
45 0 PUSH_NPARITY( S[i] );
5673 6 0 USE_ARREF(avp, svp, SUBNAME, AR_READ);
0 6 USE_ARREF(avp, svp, SUBNAME, AR_READ);
0 6 USE_ARREF(avp, svp, SUBNAME, AR_READ);
5675 5 1 if (plen <= 20) {
5677 42 5 for (i = 0; i < plen; i++) {
5679 0 42 if (_validate_and_set(&val, aTHX_ iv, IFLAG_POS) != 1)
5681 42 0 if (val >= plen || A[val] != 0) break;
42 0 if (val >= plen || A[val] != 0) break;
5685 5 0 if (i >= plen && perm_to_num(plen, V, &num))
4 1 if (i >= plen && perm_to_num(plen, V, &num))
5697 13 62 if (items == 1) k = n;
5698 7 68 if (k > n) k = n;
5699 2 73 if (k == 0) XSRETURN_EMPTY;
5700 0 73 New(0, S, k, UV);
5702 73 0 EXTEND(SP, (EXTEND_TYPE)k);
0 73 EXTEND(SP, (EXTEND_TYPE)k);
5703 589 73 for (i = 0; i < k; i++) {
5704 483 106 if (n < 2*CINTS) PUSH_NPARITY(S[i]);
483 0 if (n < 2*CINTS) PUSH_NPARITY(S[i]);
455 28 if (n < 2*CINTS) PUSH_NPARITY(S[i]);
5716 1 30 if (items == 0)
5718 683 30 for (i = 0, randcxt = MY_CXT.randcxt; i < items-1; i++) {
5732 6 22 if (items == 1)
5750 18 4 if (items > 2 || !SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVAV) {
15 3 if (items > 2 || !SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVAV) {
0 15 if (items > 2 || !SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVAV) {
5753 7 0 if (_validate_and_set(&k, aTHX_ svk, IFLAG_POS) == 0 || k > nitems)
0 7 if (_validate_and_set(&k, aTHX_ svk, IFLAG_POS) == 0 || k > nitems)
5756 10012 7 for (i = 0; i < k; i++) {
5762 15 0 USE_ARREF(avp, ST(1), SUBNAME, AR_READ);
0 15 USE_ARREF(avp, ST(1), SUBNAME, AR_READ);
0 15 USE_ARREF(avp, ST(1), SUBNAME, AR_READ);
5765 15 0 if (_validate_and_set(&k, aTHX_ svk, IFLAG_POS) == 0 || k > nitems)
3 12 if (_validate_and_set(&k, aTHX_ svk, IFLAG_POS) == 0 || k > nitems)
5767 3 12 if (k == 0)
5769 12 0 if (nitems < 65536) {
5771 0 12 New(0, I, nitems, uint16_t);
5772 73 12 I[0] = nitems-1; for (i = 1; i < nitems; i++) I[i] = i-1;
5773 12 0 EXTEND(SP, (EXTEND_TYPE)k);
0 12 EXTEND(SP, (EXTEND_TYPE)k);
5774 30 12 for (i = 0; i < k; i++) {
5782 0 0 New(0, I, nitems, size_t);
5783 0 0 I[0] = nitems-1; for (i = 1; i < nitems; i++) I[i] = i-1;
5784 0 0 EXTEND(SP, (EXTEND_TYPE)k);
0 0 EXTEND(SP, (EXTEND_TYPE)k);
5785 0 0 for (i = 0; i < k; i++) {
5800 4974 0 if (base < 2 || base > 36) croak("is_happy: invalid base %"UVuf, base);
0 4974 if (base < 2 || base > 36) croak("is_happy: invalid base %"UVuf, base);
5801 0 4974 if (k > 10) croak("is_happy: invalid exponent %"UVuf, k);
5803 14 4960 if (status == 0 && base == 10) { /* String op to reduce into range. */
14 0 if (status == 0 && base == 10) { /* String op to reduce into range. */
5806 14 0 if (len <= UV_MAX/ipow(9,k)) {
5807 1302 14 for (sum = 0, i = 0; i < len; i++)
5810 14 0 RETURN_NPARITY( (h>0) ? h+1 : 0);
14 0 RETURN_NPARITY( (h>0) ? h+1 : 0);
14 0 RETURN_NPARITY( (h>0) ? h+1 : 0);
5813 4960 0 if (status != 0)
5814 4960 0 RETURN_NPARITY(happy_height(n, base, k));
4960 0 RETURN_NPARITY(happy_height(n, base, k));
5825 0 1007 base = (ibase == 255) ? 10 : ibase;
5826 1007 0 if (base < 2 || base > 36) croak("sumdigits: invalid base %"UVuf, base);
0 1007 if (base < 2 || base > 36) croak("sumdigits: invalid base %"UVuf, base);
5829 1007 0 if (base == 10 && SVNUMTEST(svn) && (SvIsUV(svn) || SvIVX(svn) >= 0)) {
1002 5 if (base == 10 && SVNUMTEST(svn) && (SvIsUV(svn) || SvIVX(svn) >= 0)) {
1002 0 if (base == 10 && SVNUMTEST(svn) && (SvIsUV(svn) || SvIVX(svn) >= 0)) {
1001 1 if (base == 10 && SVNUMTEST(svn) && (SvIsUV(svn) || SvIVX(svn) >= 0)) {
5831 2893 1001 while ((n=t)) {
5839 6 0 if (ibase == 255 && len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'b')){
6 0 if (ibase == 255 && len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'b')){
1 5 if (ibase == 255 && len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'b')){
0 1 if (ibase == 255 && len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'b')){
0 0 if (ibase == 255 && len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'b')){
5840 1 0 base = (s[1] == 'x') ? 16 : 2;
5844 38290 6 for (i = 0; i < len; i++) {
5847 38287 3 if (c >= '0' && c <= '9') { d = c - '0'; }
38285 2 if (c >= '0' && c <= '9') { d = c - '0'; }
5848 1 4 else if (c >= 'a' && c <= 'z') { d = c - 'a' + 10; }
1 0 else if (c >= 'a' && c <= 'z') { d = c - 'a' + 10; }
5849 1 3 else if (c >= 'A' && c <= 'Z') { d = c - 'A' + 10; }
1 0 else if (c >= 'A' && c <= 'Z') { d = c - 'A' + 10; }
5850 38290 0 if (d < base)
5864 0 293 if (base < 2) croak("%s: invalid base: %d", SUBNAME, base);
5866 45 248 if (ix == 0 || ix == 1) {
14 31 if (ix == 0 || ix == 1) {
5870 248 45 if (ix == 0 && status != 0 && length < 128) {
158 90 if (ix == 0 && status != 0 && length < 128) {
158 0 if (ix == 0 && status != 0 && length < 128) {
5873 158 0 if (len >= 0) {
5875 158 0 EXTEND(SP, (EXTEND_TYPE)len);
0 158 EXTEND(SP, (EXTEND_TYPE)len);
5876 3743 158 for (i = 0; i < len; i++)
5877 3743 0 PUSH_NPARITY( digits[len-i-1] );
3743 0 PUSH_NPARITY( digits[len-i-1] );
5882 14 121 if (ix == 1 && status != 0 && length < 128) {
5 9 if (ix == 1 && status != 0 && length < 128) {
5 0 if (ix == 1 && status != 0 && length < 128) {
5885 5 0 if (len >= 0) {
5886 0 5 XPUSHs(sv_2mortal(newSVpv(s, len)));
5891 40 90 if ((ix == 0 || ix == 1) && base == 10 && length < 0) {
9 31 if ((ix == 0 || ix == 1) && base == 10 && length < 0) {
1 98 if ((ix == 0 || ix == 1) && base == 10 && length < 0) {
1 0 if ((ix == 0 || ix == 1) && base == 10 && length < 0) {
5894 0 1 if (ix == 1) {
5895 0 0 XPUSHs(sv_2mortal(newSVpv(str, len)));
5898 0 1 if (len == 1 && str[0] == '0') XSRETURN(0);
0 0 if (len == 1 && str[0] == '0') XSRETURN(0);
5901 1 0 EXTEND(SP, (EXTEND_TYPE)len);
0 1 EXTEND(SP, (EXTEND_TYPE)len);
5902 45 1 for (i = 0; i < (int)len; i++)
5903 45 0 PUSH_NPARITY(str[i]-'0');
45 0 PUSH_NPARITY(str[i]-'0');
5907 31 98 if (ix == 2) { /* fromdigits */
5908 17 14 if (!SvROK(svn)) { /* string */
5909 6 11 if (from_digit_string(&n, SvPV_nolen(svn), base)) {
5912 14 0 } else if (!_is_sv_bigint(aTHX_ svn)) { /* array ref of digits */
5915 13 1 if (from_digit_to_UV(&n, r, len, base)) {
5918 1 0 } else if (from_digit_to_str(&str, r, len, base)){
5920 0 1 XPUSHs( sv_to_bigint(aTHX_ sv_2mortal(newSVpv(str,0))) );
5928 11 98 if (ix == 2) objectify_result(aTHX_ 0, ST(0));
5935 27 1 if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) {
5937 0 27 XPUSHs(sv_2mortal(newSVpv(str, 0)));
5949 0 27 if (status == 0)
5951 0 27 if (status == -1)
5953 26 1 if (status == 1)
5964 0 90 if (MY_CXT.forcount == 0) croak("lastfor called outside a loop");
6004 0 79 SETSUBREF(subcv, block);
6006 72 2 if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) ||
35 37 if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) ||
6007 0 32 (svend && !_validate_and_set(&end, aTHX_ svend, IFLAG_POS))) {
6011 37 32 if (!svend) { end = beg; beg = 2; }
6019 69 0 if (!CvISXSUB(subcv) && beg <= end) {
68 1 if (!CvISXSUB(subcv) && beg <= end) {
6023 0 68 PUSH_MULTICALL(subcv);
6024 47 21 if (beg < 6) {
6025 6 41 beg = (beg <= 2) ? 2 : (beg <= 3) ? 3 : 5;
3 3 beg = (beg <= 2) ? 2 : (beg <= 3) ? 3 : 5;
6026 82 39 for ( ; beg < 6 && beg <= end; beg += 1+(beg>2) ) {
127 41 for ( ; beg < 6 && beg <= end; beg += 1+(beg>2) ) {
122 5 for ( ; beg < 6 && beg <= end; beg += 1+(beg>2) ) {
6027 1 121 CHECK_FORCOUNT;
6029 121 0 SCOPED_MULTICALL;
121 0 SCOPED_MULTICALL;
6032 60 8 if (beg <= end) {
6035 0 60 (beg >= UVCONST( 100000000000000) && end-beg < 100000) ||
0 0 (beg >= UVCONST( 100000000000000) && end-beg < 100000) ||
6036 0 60 (beg >= UVCONST( 10000000000000) && end-beg < 40000) ||
0 0 (beg >= UVCONST( 10000000000000) && end-beg < 40000) ||
6037 0 60 (beg >= UVCONST( 1000000000000) && end-beg < 17000) ||
0 0 (beg >= UVCONST( 1000000000000) && end-beg < 17000) ||
6039 33 27 ((end-beg) < 500) ) { /* MULTICALL next prime */
6040 274 32 for (beg = next_prime(beg-1); beg <= end && beg != 0; beg = next_prime(beg)) {
274 0 for (beg = next_prime(beg-1); beg <= end && beg != 0; beg = next_prime(beg)) {
6041 1 273 CHECK_FORCOUNT;
6043 273 0 SCOPED_MULTICALL;
273 0 SCOPED_MULTICALL;
6047 27 2 while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) {
6048 0 27 int crossuv = (seg_high > IV_MAX) && !SvIsUV(svarg);
0 0 int crossuv = (seg_high > IV_MAX) && !SvIsUV(svarg);
6049 1266 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
2 1264 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
1261 3 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
1266 17 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
133 27 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
6050 114 1147 CHECK_FORCOUNT;
6052 165 982 if (SvTYPE(svarg) != SVt_IV) { sv_setuv(svarg, p); }
6053 0 982 else if (crossuv && p > IV_MAX) { sv_setuv(svarg, p); crossuv=0; }
0 0 else if (crossuv && p > IV_MAX) { sv_setuv(svarg, p); crossuv=0; }
6055 1147 0 SCOPED_MULTICALL;
1147 0 SCOPED_MULTICALL;
6057 25 2 CHECK_FORCOUNT;
6063 68 0 POP_MULTICALL;
6068 1 0 if (beg < 6) {
6069 0 1 beg = (beg <= 2) ? 2 : (beg <= 3) ? 3 : 5;
0 0 beg = (beg <= 2) ? 2 : (beg <= 3) ? 3 : 5;
6070 0 0 for ( ; beg < 6 && beg <= end; beg += 1+(beg>2) ) {
1 0 for ( ; beg < 6 && beg <= end; beg += 1+(beg>2) ) {
0 1 for ( ; beg < 6 && beg <= end; beg += 1+(beg>2) ) {
6072 0 0 PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN;
6073 0 0 CHECK_FORCOUNT;
6076 0 1 if (beg <= end) { /* NO-MULTICALL segment sieve */
6078 0 0 while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) {
6079 0 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
0 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
0 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
0 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
0 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
6080 0 0 CHECK_FORCOUNT;
6082 0 0 PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN;
6084 0 0 CHECK_FORCOUNT;
6090 0 69 END_FORCOUNT;
6107 0 61 SETSUBREF(subcv, block);
6109 59 2 if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) ||
2 57 if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) ||
6110 0 2 (svend && !_validate_and_set(&end, aTHX_ svend, IFLAG_POS))) {
6114 57 2 if (!svend) { end = beg; beg = ix ? 4 : 9; }
31 26 if (!svend) { end = beg; beg = ix ? 4 : 9; }
6121 59 0 if (!CvISXSUB(subcv) && end >= beg) {
57 2 if (!CvISXSUB(subcv) && end >= beg) {
6128 0 57 PUSH_MULTICALL(subcv);
6129 57 0 if (beg >= MPU_MAX_PRIME ||
6131 0 57 (beg >= UVCONST( 100000000000000) && end-beg < 120000) ||
0 0 (beg >= UVCONST( 100000000000000) && end-beg < 120000) ||
6132 0 57 (beg >= UVCONST( 10000000000000) && end-beg < 50000) ||
0 0 (beg >= UVCONST( 10000000000000) && end-beg < 50000) ||
6133 0 57 (beg >= UVCONST( 1000000000000) && end-beg < 20000) ||
0 0 (beg >= UVCONST( 1000000000000) && end-beg < 20000) ||
6135 55 2 end-beg < 1000 ) {
6138 3928 5 while (beg++ < end) {
6139 907 3021 if (beg == nextprime)
6141 2058 963 else if (FORCOMPTEST(ix,beg)) {
2058 0 else if (FORCOMPTEST(ix,beg)) {
753 1305 else if (FORCOMPTEST(ix,beg)) {
6143 1716 0 SCOPED_MULTICALL;
1716 0 SCOPED_MULTICALL;
6145 50 3878 CHECK_FORCOUNT;
6148 1 1 if (!ix) {
6149 0 1 if (beg < 8) beg = 8;
6150 1 0 } else if (beg <= 4) { /* sieve starts at 7, so handle this here */
6152 1 0 SCOPED_MULTICALL;
1 0 SCOPED_MULTICALL;
6158 2 0 nextprime = (end >= MPU_MAX_PRIME) ? MPU_MAX_PRIME : next_prime(end);
6160 2 2 while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) {
6161 0 2 int crossuv = (seg_high > IV_MAX) && !SvIsUV(svarg);
0 0 int crossuv = (seg_high > IV_MAX) && !SvIsUV(svarg);
6162 8729 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
2 8727 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
8726 1 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
8729 352 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
354 2 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
6164 1 8725 if (cbeg < beg)
6165 1 0 cbeg = beg - (ix == 0 && (beg % 2));
1 0 cbeg = beg - (ix == 0 && (beg % 2));
6167 2 8724 cend = prevprime-1; if (cend > end) cend = end;
6169 6466 2260 cinc = 1 + (ix==0);
6170 29528 6766 for (c = cbeg + (ix==0); c <= cend; c += cinc) {
6171 1960 27568 CHECK_FORCOUNT;
6172 0 27568 if (SvTYPE(svarg) != SVt_IV) { sv_setuv(svarg,c); }
6173 0 27568 else if (crossuv && c > IV_MAX) { sv_setuv(svarg,c); crossuv=0;}
0 0 else if (crossuv && c > IV_MAX) { sv_setuv(svarg,c); crossuv=0;}
6175 27568 0 SCOPED_MULTICALL;
27568 0 SCOPED_MULTICALL;
6180 0 2 if (end > nextprime) /* Complete the case where end > max_prime */
6181 0 0 while (nextprime++ < end)
6182 0 0 if (FORCOMPTEST(ix,nextprime)) {
0 0 if (FORCOMPTEST(ix,nextprime)) {
0 0 if (FORCOMPTEST(ix,nextprime)) {
6183 0 0 CHECK_FORCOUNT;
6185 0 0 SCOPED_MULTICALL;
0 0 SCOPED_MULTICALL;
6189 57 0 POP_MULTICALL;
6193 0 2 if (beg <= end) {
6195 0 0 while (beg++ < end) {
6196 0 0 if (FORCOMPTEST(ix,beg) && !is_prob_prime(beg)) {
0 0 if (FORCOMPTEST(ix,beg) && !is_prob_prime(beg)) {
0 0 if (FORCOMPTEST(ix,beg) && !is_prob_prime(beg)) {
0 0 if (FORCOMPTEST(ix,beg) && !is_prob_prime(beg)) {
6198 0 0 PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN;
6199 0 0 CHECK_FORCOUNT;
6204 0 59 END_FORCOUNT;
6216 0 2 SETSUBREF(subcv, block);
6218 1 1 if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) ||
0 1 if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) ||
6219 0 0 (svend && !_validate_and_set(&end, aTHX_ svend, IFLAG_POS))) {
6223 1 0 if (!svend) { end = beg; beg = 4; }
6225 0 1 if (beg < 4) beg = 4;
6226 0 1 if (end > MPU_MAX_SEMI_PRIME) end = MPU_MAX_SEMI_PRIME;
6233 1 0 if (!CvISXSUB(subcv) && end >= beg) {
1 0 if (!CvISXSUB(subcv) && end >= beg) {
6238 0 1 PUSH_MULTICALL(subcv);
6239 1 0 if (beg >= MPU_MAX_SEMI_PRIME ||
6241 0 1 (beg >= UVCONST(10000000000000000000) && end-beg < 1400000) ||
0 0 (beg >= UVCONST(10000000000000000000) && end-beg < 1400000) ||
6242 0 1 (beg >= UVCONST( 1000000000000000000) && end-beg < 950000) ||
0 0 (beg >= UVCONST( 1000000000000000000) && end-beg < 950000) ||
6243 0 1 (beg >= UVCONST( 100000000000000000) && end-beg < 440000) ||
0 0 (beg >= UVCONST( 100000000000000000) && end-beg < 440000) ||
6244 0 1 (beg >= UVCONST( 10000000000000000) && end-beg < 240000) ||
0 0 (beg >= UVCONST( 10000000000000000) && end-beg < 240000) ||
6245 0 1 (beg >= UVCONST( 1000000000000000) && end-beg < 65000) ||
0 0 (beg >= UVCONST( 1000000000000000) && end-beg < 65000) ||
6246 0 1 (beg >= UVCONST( 100000000000000) && end-beg < 29000) ||
0 0 (beg >= UVCONST( 100000000000000) && end-beg < 29000) ||
6247 0 1 (beg >= UVCONST( 10000000000000) && end-beg < 11000) ||
0 0 (beg >= UVCONST( 10000000000000) && end-beg < 11000) ||
6248 0 1 (beg >= UVCONST( 1000000000000) && end-beg < 5000) ||
0 0 (beg >= UVCONST( 1000000000000) && end-beg < 5000) ||
6250 0 1 end-beg < 200 ) {
6251 0 0 for (c = beg; c <= end && c >= beg; c++) {
0 0 for (c = beg; c <= end && c >= beg; c++) {
6252 0 0 if (is_semiprime(c)) {
6254 0 0 SCOPED_MULTICALL;
0 0 SCOPED_MULTICALL;
6256 0 0 CHECK_FORCOUNT;
6259 1 1 while (beg < end) {
6262 0 1 if ((seg_end - seg_beg) > 50000000) seg_end = seg_beg + 50000000 - 1;
6264 299 1 for (c = 0; c < count; c++) {
6266 299 0 SCOPED_MULTICALL;
299 0 SCOPED_MULTICALL;
6267 0 299 CHECK_FORCOUNT;
6271 0 1 CHECK_FORCOUNT;
6275 1 0 POP_MULTICALL;
6279 0 0 if (beg <= end) {
6281 0 0 while (beg++ < end) {
6282 0 0 if (is_semiprime(beg)) {
6284 0 0 PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN;
6285 0 0 CHECK_FORCOUNT;
6290 0 1 END_FORCOUNT;
6302 0 12 SETSUBREF(subcv, block);
6304 11 1 if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) ||
1 10 if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) ||
6305 0 1 (svend && !_validate_and_set(&end, aTHX_ svend, IFLAG_POS))) {
6309 10 1 if (!svend) { end = beg; beg = 1; }
6312 10 1 if (k == 0 || k >= BITS_PER_WORD) XSRETURN(0);
0 10 if (k == 0 || k >= BITS_PER_WORD) XSRETURN(0);
6314 10 0 if (beg < (UVCONST(1) << k)) beg = UVCONST(1) << k;
6315 0 10 if (end > max_nth_almost_prime(k)) end = max_nth_almost_prime(k);
6316 1 9 if (beg > end) XSRETURN(0);
6320 0 9 if (k > MPU_MAX_POW3)
6322 22 2 while ((k-shiftres) > 1 && (end >> shiftres) < ipow(3, k - shiftres))
15 7 while ((k-shiftres) > 1 && (end >> shiftres) < ipow(3, k - shiftres))
6334 9 0 if (!CvISXSUB(subcv) && end >= beg) {
9 0 if (!CvISXSUB(subcv) && end >= beg) {
6339 0 9 PUSH_MULTICALL(subcv);
6340 9 9 while (beg <= end) {
6345 0 9 if (k > 12) ssize *= 16;
6346 9 0 if (k > 18 || seg_beg > 9*k3) ssize *= 4;
0 9 if (k > 18 || seg_beg > 9*k3) ssize *= 4;
6347 9 0 if (k > 24 || seg_beg > 81*k3) ssize *= 3;
0 9 if (k > 24 || seg_beg > 81*k3) ssize *= 3;
6348 0 9 if ((seg_end - seg_beg) > ssize) seg_end = seg_beg + ssize - 1;
6350 999 9 for (c = 0; c < count; c++) {
6352 999 0 SCOPED_MULTICALL;
999 0 SCOPED_MULTICALL;
6353 0 999 CHECK_FORCOUNT;
6356 0 9 if (seg_end == UV_MAX) break;
6358 0 9 CHECK_FORCOUNT;
6361 9 0 POP_MULTICALL;
6365 0 0 if (beg <= end) {
6366 0 0 for (c = beg; c <= end && c >= beg; c++) {
0 0 for (c = beg; c <= end && c >= beg; c++) {
6367 0 0 if (is_almost_prime(k,c)) {
6369 0 0 PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN;
6370 0 0 CHECK_FORCOUNT;
6375 0 9 END_FORCOUNT;
6388 0 72 SETSUBREF(subcv, block);
6390 1 71 if (!_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) {
6402 71 0 if (!CvISXSUB(subcv)) {
6406 0 71 PUSH_MULTICALL(subcv);
6407 272 64 for (i = 0; i < ndivisors; i++) {
6409 272 0 SCOPED_MULTICALL;
272 0 SCOPED_MULTICALL;
6410 7 265 CHECK_FORCOUNT;
6413 71 0 POP_MULTICALL;
6418 0 0 for (i = 0; i < ndivisors; i++) {
6420 0 0 PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN;
6421 0 0 CHECK_FORCOUNT;
6426 0 71 END_FORCOUNT;
6441 0 44 SETSUBREF(subcv, block);
6442 0 44 if (!_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) {
6446 0 44 if (n > (UV_MAX-2)) croak("%s: argument overflow", SUBNAME);
6448 0 44 New(0, svals, n+1, SV*);
6449 738 44 for (i = 0; i <= n; i++) {
6455 16 28 if (svh != 0) {
6458 16 0 if (!SvROK(svh) || SvTYPE(SvRV(svh)) != SVt_PVHV)
0 16 if (!SvROK(svh) || SvTYPE(SvRV(svh)) != SVt_PVHV)
6461 8 8 if ((svp = hv_fetchs(rhash, "n", 0)) != NULL)
6463 9 7 if ((svp = hv_fetchs(rhash, "amin", 0)) != NULL) amin = my_svuv(*svp);
6464 5 11 if ((svp = hv_fetchs(rhash, "amax", 0)) != NULL) amax = my_svuv(*svp);
6465 2 14 if ((svp = hv_fetchs(rhash, "nmin", 0)) != NULL) nmin = my_svuv(*svp);
6466 2 14 if ((svp = hv_fetchs(rhash, "nmax", 0)) != NULL) nmax = my_svuv(*svp);
6467 3 13 if ((svp = hv_fetchs(rhash, "prime",0)) != NULL) primeq=my_svuv(*svp);
6469 0 16 if (amin < 1) amin = 1;
6470 0 16 if (amax > n) amax = n;
6471 0 16 if (nmin < 1) nmin = 1;
6472 0 16 if (nmax > n) nmax = n;
6473 15 1 if (primeq != 0 && primeq != -1) primeq = 1; /* -1, 0, or 1 */
2 13 if (primeq != 0 && primeq != -1) primeq = 1; /* -1, 0, or 1 */
6476 2 42 if (primeq == 1) {
6478 1 1 UV next = amin <= 2 ? 2 : next_prime(amin-1);
6479 0 2 if (amin < next) amin = next;
6480 0 2 if (amax > prev) amax = prev;
6483 2 42 if (n==0 && nmin <= 1) {
2 0 if (n==0 && nmin <= 1) {
6485 0 2 PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN;
6487 42 2 if (n >= nmin && nmin <= nmax && amin <= amax && nmax > 0 && amax > 0)
42 0 if (n >= nmin && nmin <= nmax && amin <= amax && nmax > 0 && amax > 0)
41 1 if (n >= nmin && nmin <= nmax && amin <= amax && nmax > 0 && amax > 0)
41 0 if (n >= nmin && nmin <= nmax && amin <= amax && nmax > 0 && amax > 0)
41 0 if (n >= nmin && nmin <= nmax && amin <= amax && nmax > 0 && amax > 0)
6490 0 41 New(0, a, n+1, UV);
6495 15981 27 while (k != 0) {
6499 15924 57 r = (ix == 0) ? x : 1;
6500 20502 15981 while (r <= y) {
6508 4548 15981 while (k+1 > nmax) { /* Skip range if over max size */
6513 3617 12364 if (k+1 < nmin) { /* Skip if not over min size */
6514 9 3608 if (a[0] >= n-nmin+1 && a[k] > 1) break; /* early exit check */
9 0 if (a[0] >= n-nmin+1 && a[k] > 1) break; /* early exit check */
6519 9527 2837 if (amin > 1 || amax < n) {
615 8912 if (amin > 1 || amax < n) {
6521 3 3449 if (a[0] > amax) break;
6523 3428 21 if (ix == 0) { /* value restrictions for partitions */
6524 578 2850 if (a[k] > amax) continue;
6527 51 7 for (i = 0; i <= k; i++)
6528 44 7 if (a[i] < amin || a[i] > amax)
37 7 if (a[i] < amin || a[i] > amax)
6530 14 7 if (i <= k) continue;
6533 2602 9167 if (primeq != -1) {
6534 2510 1189 for (i = 0; i <= k; i++) if (is_prime(a[i]) != primeq) break;
3699 92 for (i = 0; i <= k; i++) if (is_prime(a[i]) != primeq) break;
6535 2510 92 if (i <= k) continue;
6538 0 9259 PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)k+1);
9259 0 PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)k+1);
0 9259 PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)k+1);
6539 76536 9259 for (i = 0; i <= k; i++) { PUSHs(svals[a[i]]); }
6541 2 9257 CHECK_FORCOUNT;
6544 0 41 END_FORCOUNT;
6546 738 44 for (i = 0; i <= n; i++)
6564 0 34 SETSUBREF(subcv, block);
6565 13 21 if (ix > 0 && svk != 0)
0 13 if (ix > 0 && svk != 0)
6568 34 0 if (!_validate_and_set(&n, aTHX_ svn, IFLAG_POS) ||
17 17 if (!_validate_and_set(&n, aTHX_ svn, IFLAG_POS) ||
6569 0 17 (svk && !_validate_and_set(&k, aTHX_ svk, IFLAG_POS))) {
6574 17 17 if (svk == 0) {
6575 13 4 begk = (ix == 0) ? 0 : n;
6579 1 16 if (begk > n)
6583 0 33 New(0, svals, n, SV*);
6584 134 33 for (i = 0; i < n; i++) {
6588 0 33 New(0, cm, endk+1, UV);
6592 33 0 if (!CvISXSUB(subcv)) {
6598 0 33 PUSH_MULTICALL(subcv);
6599 39 30 for (k = begk; k <= endk; k++) {
6602 1865 20672 if (ix < 2 || k != 1) {
1864 1 if (ix < 2 || k != 1) {
6606 281265 22536 for (j = k-1; j >= 0; j--)
6608 22536 0 SCOPED_MULTICALL;
22536 0 SCOPED_MULTICALL;
6610 3 22534 CHECK_FORCOUNT;
6611 36 22498 if (_comb_iterate(cm, k, n, ix)) break;
6613 3 36 CHECK_FORCOUNT;
6616 33 0 POP_MULTICALL;
6620 0 0 for (k = begk; k <= endk; k++) {
6623 0 0 if (ix < 2 || k != 1) {
0 0 if (ix < 2 || k != 1) {
6624 0 0 PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)k);
0 0 PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)k);
0 0 PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)k);
6625 0 0 for (i = 0; i < k; i++) { PUSHs(svals[ cm[k-i-1]-1 ]); }
6628 0 0 CHECK_FORCOUNT;
6629 0 0 if (_comb_iterate(cm, k, n, ix)) break;
6631 0 0 CHECK_FORCOUNT;
6636 134 33 for (i = 0; i < n; i++)
6639 0 33 END_FORCOUNT;
6650 0 9 SETSUBREF(subcv, block);
6653 1 8 if (narrays < 1) XSRETURN(0);
6655 17 5 for (i = 1; i <= narrays; i++) {
6656 0 17 SvGETMAGIC(ST(i));
0 0 SvGETMAGIC(ST(i));
6657 16 1 CHECK_ARRAYREF(ST(i));
0 16 CHECK_ARRAYREF(ST(i));
6658 2 14 if (av_count((AV *)SvRV(ST(i))) == 0)
6662 0 5 Newz(0, arcnt, narrays, SSize_t);
6663 0 5 New(0, arlen, narrays, SSize_t);
6664 0 5 New(0, arsvs, narrays, SV**);
6666 12 5 for (i = 0; i < narrays; i++) {
6668 12 0 USE_ARREF(inav, ST(i+1), SUBNAME, AR_READ);
0 12 USE_ARREF(inav, ST(i+1), SUBNAME, AR_READ);
0 12 USE_ARREF(inav, ST(i+1), SUBNAME, AR_READ);
6670 0 12 New(0, arsvs[i], len_inav, SV*);
6671 23 12 for (j = 0; j < (SSize_t)len_inav; j++) {
6673 23 0 arsvs[i][j] = v ? v : &PL_sv_undef;
6678 5 0 if (!CvISXSUB(subcv)) {
6685 0 5 PUSH_MULTICALL(subcv);
6689 44 22 for (i = narrays-1; i >= 0; i--) /* Faster to fill backwards */
6691 22 0 SCOPED_MULTICALL;
22 0 SCOPED_MULTICALL;
6692 0 22 CHECK_FORCOUNT;
6693 32 5 for (i = narrays-1; i >= 0; i--) {
6694 15 17 if (++arcnt[i] >= arlen[i]) arcnt[i] = 0;
6697 17 5 } while (i >= 0);
6699 5 0 POP_MULTICALL;
6704 0 0 PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)narrays);
0 0 PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)narrays);
0 0 PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)narrays);
6705 0 0 for (i = 0; i < narrays; i++) { PUSHs(arsvs[i][arcnt[i]]); }
6707 0 0 CHECK_FORCOUNT;
6708 0 0 for (i = narrays-1; i >= 0; i--) {
6709 0 0 if (++arcnt[i] >= arlen[i]) arcnt[i] = 0;
6712 0 0 } while (i >= 0);
6714 12 5 for (i = 0; i < narrays; i++)
6719 0 5 END_FORCOUNT;
6736 0 14 SETSUBREF(subcv, block);
6738 10 4 if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) ||
6 4 if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) ||
6739 0 6 (svend && !_validate_and_set(&end, aTHX_ svend, IFLAG_POS))) {
6743 4 6 if (!svend) { end = beg; beg = 1; }
6744 4 6 if (beg < 1) beg = 1;
6745 2 8 if (beg > end) XSRETURN(0);
6747 69 8 for (maxfactors = 0, n = end >> 1; n; n >>= 1)
6749 69 8 for (i = 0; i < maxfactors; i++) {
6758 6 2 if (beg <= 1) {
6760 0 6 PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN;
6765 8 0 if (!CvISXSUB(subcv)) {
6771 0 8 PUSH_MULTICALL(subcv);
6772 2987 8 for (n = 0; n < end-beg+1; n++) {
6773 0 2987 CHECK_FORCOUNT;
6775 1863 1124 if (nfactors > 0) {
6780 4636 1863 for (i = nfactors-1; i >= 0; i--) {
6787 1863 0 SCOPED_MULTICALL;
1863 0 SCOPED_MULTICALL;
6791 8 0 POP_MULTICALL;
6795 0 0 for (n = 0; n < end-beg+1; n++) {
6796 0 0 CHECK_FORCOUNT;
6798 0 0 if (nfactors > 0) {
6799 0 0 PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)nfactors);
0 0 PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)nfactors);
0 0 PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)nfactors);
6802 0 0 for (i = 0; i < nfactors; i++) {
6814 69 8 for (i = 0; i < maxfactors; i++)
6816 0 8 END_FORCOUNT;
6828 0 5 SETSUBREF(subcv, block);
6830 4 1 if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) ||
3 1 if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) ||
6831 0 3 (svend && !_validate_and_set(&end, aTHX_ svend, IFLAG_POS))) {
6835 1 3 if (!svend) { end = beg; beg = 1; }
6836 2 2 if (beg < 1) beg = 1;
6837 1 3 if (beg > end) XSRETURN(0);
6843 2 1 if (beg <= 1) {
6845 0 2 PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN;
6848 2 3 while (beg <= end) {
6850 0 2 if (seghi-seglo > (65536*256))
6854 2 0 if (!CvISXSUB(subcv)) {
6858 0 2 PUSH_MULTICALL(subcv);
6859 109055 2 for (i = 0; i < seghi-seglo+1; i++) {
6860 0 109055 CHECK_FORCOUNT;
6861 66306 42749 if (isf[i]) {
6863 66306 0 SCOPED_MULTICALL;
66306 0 SCOPED_MULTICALL;
6867 2 0 POP_MULTICALL;
6871 0 0 for (i = 0; i < seghi-seglo+1; i++) {
6872 0 0 CHECK_FORCOUNT;
6873 0 0 if (isf[i]) {
6875 0 0 PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN;
6879 0 2 if (seghi == UV_MAX) break;
6881 0 2 CHECK_FORCOUNT;
6884 0 3 END_FORCOUNT;
6897 0 4 SETSUBREF(subcv, block);
6898 1 3 if (items <= 1) XSRETURN_UNDEF;
6905 3 0 SvSetMagicSV(ret, args[1]);
0 3 SvSetMagicSV(ret, args[1]);
6907 3 0 if (!CvISXSUB(subcv)) {
6911 0 3 PUSH_MULTICALL(subcv);
6912 4 3 for (i = 2; i < items; i++) {
6914 0 4 SCOPED_MULTICALL;
0 4 SCOPED_MULTICALL;
6915 4 0 SvSetMagicSV(ret, *PL_stack_sp);
0 4 SvSetMagicSV(ret, *PL_stack_sp);
6918 3 0 POP_MULTICALL;
6923 0 0 for (i = 2; i < items; i++) {
6926 0 0 PUSHMARK(SP);
6928 0 0 SvSetMagicSV(ret, *PL_stack_sp);
0 0 SvSetMagicSV(ret, *PL_stack_sp);
6945 0 5 SETSUBREF(subcv, block);
6946 2 3 if (items <= 2) XSRETURN_EMPTY;
6961 3 0 if (!CvISXSUB(subcv)) {
6965 0 3 PUSH_MULTICALL(subcv);
6966 9 3 for (i = 1; i < items-1; i++) {
6971 5 4 SCOPED_MULTICALL;
5 4 SCOPED_MULTICALL;
6975 3 0 POP_MULTICALL;
6980 0 0 for (i = 1; i < items-1; i++) {
6987 0 0 PUSHMARK(SP);
6992 9 3 for (i = 0; i < items-2; i++)
7015 0 961 SETSUBREF(subcv, block);
7019 961 0 if (!CvISXSUB(subcv)) {
7023 0 961 PUSH_MULTICALL(subcv);
7024 6583 374 for (index = 1; index < items; index++) {
7026 6265 318 SCOPED_MULTICALL;
6265 318 SCOPED_MULTICALL;
7027 587 5996 if (SvTRUEx(*PL_stack_sp) ^ invert)
7031 961 0 POP_MULTICALL;
7036 0 0 for (index = 1; index < items; index++) {
7039 0 0 PUSHMARK(SP);
7041 0 0 if (SvTRUEx(*PL_stack_sp) ^ invert)
7046 5 956 if (ix == 4) {
7047 2 3 if (index == items)
7052 5 951 if (ix == 6) {
7053 2 3 if (index == items)
7058 581 370 if (index != items) /* We exited the loop early */
7061 366 585 if (ret_true) XSRETURN_YES;
7074 6 1 retvals = (GIMME_V != G_SCALAR && GIMME_V != G_VOID);
6 0 retvals = (GIMME_V != G_SCALAR && GIMME_V != G_VOID);
7076 86 7 for (status = 1, nret = 0, j = 0; j < items; j++) {
7078 0 86 if (status == 0) break;
7079 48 38 if (iset_add(&s, n, status) == 0)
7081 0 38 if (iset_sign(s) == 0) { status = 0; break; }
7082 28 10 if (retvals) {
7083 22 6 PUSHs(sv_2mortal(NEWSVINT(status,n)));
7089 7 0 if (status != 0 && retvals) {
6 1 if (status != 0 && retvals) {
7090 0 6 if (nret != sz)croak("vecuniq: iset %lu items, pushed %lu items",sz,nret);
7092 1 0 } else if (status != 0) {
7104 0 0 if (GIMME_V == G_SCALAR) { /* don't build return list if not needed */
7105 0 0 for (i = 0; i < items; i++) {
7106 0 0 SvGETMAGIC(args[i]);
0 0 SvGETMAGIC(args[i]);
7107 0 0 if (SvOK(args[i])) {
7109 0 0 if (!hv_exists_ent(hv, tmp, 0)) {
7113 0 0 } else if (0 == seen_undef++)
7120 0 0 for (i = 0; i < items; i++) {
7121 0 0 SvGETMAGIC(args[i]);
0 0 SvGETMAGIC(args[i]);
7122 0 0 if (SvOK(args[i])) {
7123 0 0 SvSetSV_nosteal(tmp, args[i]);
7124 0 0 if (!hv_exists_ent(hv, tmp, 0)) {
7128 0 0 } else if (0 == seen_undef++)
7141 2 12 if (items == 0) {
7142 1 1 if (GIMME_V == G_SCALAR) XSRETURN_UV(0);
7147 0 12 New(0, L, len, UV);
7149 39 9 for (i = 0; i < len && itype != IARR_TYPE_BAD && SVNUMTEST(ST(i)); i++) {
39 0 for (i = 0; i < len && itype != IARR_TYPE_BAD && SVNUMTEST(ST(i)); i++) {
36 3 for (i = 0; i < len && itype != IARR_TYPE_BAD && SVNUMTEST(ST(i)); i++) {
7151 8 28 if (n < 0) {
7152 1 7 if (SvIsUV(ST(i))) itype |= IARR_TYPE_POS;
7157 9 3 if (i < len || itype == IARR_TYPE_BAD) {
1 8 if (i < len || itype == IARR_TYPE_BAD) {
7162 4 4 if (itype == IARR_TYPE_NEG)
7167 4 4 if (GIMME_V == G_SCALAR) {
7169 13 4 for (i = 1; i < len; i++)
7170 7 6 if (L[i] != L[i-1])
7175 2 2 int sign = itype == IARR_TYPE_NEG ? -1 : 1;
7176 4 0 EXTEND(SP, (EXTEND_TYPE)len*2);
0 4 EXTEND(SP, (EXTEND_TYPE)len*2);
7179 13 4 for (i = 1; i < len; i++) {
7180 6 7 if (L[i] == L[i-1]) { count++; continue; }
7181 0 7 PUSHs(sv_2mortal(NEWSVINT(sign,L[i-1]))); /* key */
7186 2 2 PUSHs(sv_2mortal(NEWSVINT(sign,L[i-1]))); /* key */
7201 1 7 if (items == 0) {
7202 0 1 if (GIMME_V == G_SCALAR) XSRETURN_UV(0);
7207 0 7 New(0, L, len, UV);
7211 52 3 for (i = 0; i < len && itype != IARR_TYPE_BAD && SVNUMTEST(ST(i)); i++) {
52 0 for (i = 0; i < len && itype != IARR_TYPE_BAD && SVNUMTEST(ST(i)); i++) {
48 4 for (i = 0; i < len && itype != IARR_TYPE_BAD && SVNUMTEST(ST(i)); i++) {
7214 2 46 if (n < 0) {
7215 0 2 if (SvIsUV(ST(i))) itype |= IARR_TYPE_POS;
7219 22 26 if (!iset_add(&seen, n, sign))
7222 0 7 if (iset_is_invalid(seen)) itype = IARR_TYPE_BAD; /* Poison the type */
7224 3 4 if (i < len || itype == IARR_TYPE_BAD) {
0 3 if (i < len || itype == IARR_TYPE_BAD) {
7230 1 2 if (GIMME_V != G_ARRAY) {
7231 23 1 for (i = 0, count = 0; i < len; i++)
7232 2 21 if (!iset_contains(dups, L[i]))
7237 24 2 for (i = 0, retlen = 0; i < len; i++)
7238 3 21 if (!iset_contains(dups, L[i]))