Branch Coverage

lib/Params/Validate/XS.xs
Criterion Covered Total %
branch 786 1452 54.1


line true false branch
85 0 0 if (NULL == module) {
95 0 0 PUSHMARK(SP);
96 0 0 XPUSHs(thing);
104 0 0 FREETMPS;
114 0 6918 if (! no_v)
117 6918 0 return SvTRUE(no_v);
0 6918 return SvTRUE(no_v);
0 0 return SvTRUE(no_v);
6684 234 return SvTRUE(no_v);
6684 0 return SvTRUE(no_v);
0 6684 return SvTRUE(no_v);
233 1 return SvTRUE(no_v);
233 0 return SvTRUE(no_v);
233 0 return SvTRUE(no_v);
233 0 return SvTRUE(no_v);
0 233 return SvTRUE(no_v);
233 0 return SvTRUE(no_v);
1 0 return SvTRUE(no_v);
1 0 return SvTRUE(no_v);
0 1 return SvTRUE(no_v);
0 0 return SvTRUE(no_v);
0 0 return SvTRUE(no_v);
1 0 return SvTRUE(no_v);
0 0 return SvTRUE(no_v);
128 12 44 if (mask & SCALAR) {
132 16 40 if (mask & ARRAYREF) {
133 0 16 sv_catpv(buffer, empty ? "arrayref" : " arrayref");
136 6 50 if (mask & HASHREF) {
137 2 4 sv_catpv(buffer, empty ? "hashref" : " hashref");
140 2 54 if (mask & CODEREF) {
141 0 2 sv_catpv(buffer, empty ? "coderef" : " coderef");
144 6 50 if (mask & GLOB) {
145 0 6 sv_catpv(buffer, empty ? "glob" : " glob");
148 8 48 if (mask & GLOBREF) {
149 2 6 sv_catpv(buffer, empty ? "globref" : " globref");
152 2 54 if (mask & SCALARREF) {
153 0 2 sv_catpv(buffer, empty ? "scalarref" : " scalarref");
156 2 54 if (mask & UNDEF) {
157 0 2 sv_catpv(buffer, empty ? "undef" : " undef");
160 6 50 if (mask & OBJECT) {
161 0 6 sv_catpv(buffer, empty ? "object" : " object");
164 0 56 if (mask & UNKNOWN) {
165 0 0 sv_catpv(buffer, empty ? "unknown" : " unknown");
177 2122 13 if (SvTYPE(sv) == SVt_PVGV) {
180 6 2116 if (!SvOK(sv)) {
6 0 if (!SvOK(sv)) {
0 6 if (!SvOK(sv)) {
183 67 2049 if (!SvROK(sv)) {
187 0 67 switch (SvTYPE(SvRV(sv))) {
225 67 0 if (type) {
226 7 60 if (sv_isobject(sv)) return type | OBJECT;
240 50 12 rawstr = SvPV(string, len);
241 62 0 if (len) {
242 28 34 switch(rawstr[0]) {
16 12 switch(rawstr[0]) {
257 7 80 if(SvOK(value)) {
7 0 if(SvOK(value)) {
0 7 if(SvOK(value)) {
258 16 64 return (void *)form("\"%s\"", SvPV_nolen(value));
272 13 142 if ((temp = hv_fetch(options, "on_fail", 7, 0))) {
273 0 13 SvGETMAGIC(*temp);
284 0 155 PUSHMARK(SP);
285 0 155 mXPUSHs(message);
289 13 142 if (on_fail) {
301 0 0 FREETMPS;
313 1 147 if ((temp = hv_fetch(options, "called", 6, 0))) {
314 0 1 SvGETMAGIC(*temp);
328 13 134 if ((temp = hv_fetch(options, "stack_skip", 10, 0))) {
329 0 13 SvGETMAGIC(*temp);
330 13 0 frame = SvIV(*temp);
337 147 0 if (frame > 0) {
343 147 0 if (cx) {
351 110 0 if (cvgv && isGV(cvgv)) {
110 0 if (cvgv && isGV(cvgv)) {
386 44 0 if (! value) {
390 0 44 SvGETMAGIC(value);
391 2 42 if (SvOK(value) && (sv_isobject(value) || (SvPOK(value) && ! looks_like_number(value)))) {
2 0 if (SvOK(value) && (sv_isobject(value) || (SvPOK(value) && ! looks_like_number(value)))) {
0 2 if (SvOK(value) && (sv_isobject(value) || (SvPOK(value) && ! looks_like_number(value)))) {
8 34 if (SvOK(value) && (sv_isobject(value) || (SvPOK(value) && ! looks_like_number(value)))) {
6 2 if (SvOK(value) && (sv_isobject(value) || (SvPOK(value) && ! looks_like_number(value)))) {
6 0 if (SvOK(value) && (sv_isobject(value) || (SvPOK(value) && ! looks_like_number(value)))) {
400 0 40 PUSHMARK(SP);
401 0 40 EXTEND(SP, 2);
408 0 40 if (! count)
414 0 40 SvGETMAGIC(ret);
416 40 0 ok = SvTRUE(ret);
0 40 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
0 40 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
37 3 ok = SvTRUE(ret);
37 0 ok = SvTRUE(ret);
37 0 ok = SvTRUE(ret);
23 14 ok = SvTRUE(ret);
0 23 ok = SvTRUE(ret);
23 14 ok = SvTRUE(ret);
3 0 ok = SvTRUE(ret);
3 0 ok = SvTRUE(ret);
0 3 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
3 0 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
419 40 0 FREETMPS;
426 18 26 if (! ok) {
437 2 16 if ( SvOK(value) ) {
2 0 if ( SvOK(value) ) {
0 2 if ( SvOK(value) ) {
456 40 0 if (! value) {
460 0 40 SvGETMAGIC(value);
461 2 38 if (SvOK(value) && (sv_isobject(value) || (SvPOK(value) && ! looks_like_number(value)))) {
2 0 if (SvOK(value) && (sv_isobject(value) || (SvPOK(value) && ! looks_like_number(value)))) {
0 2 if (SvOK(value) && (sv_isobject(value) || (SvPOK(value) && ! looks_like_number(value)))) {
7 31 if (SvOK(value) && (sv_isobject(value) || (SvPOK(value) && ! looks_like_number(value)))) {
5 2 if (SvOK(value) && (sv_isobject(value) || (SvPOK(value) && ! looks_like_number(value)))) {
5 0 if (SvOK(value) && (sv_isobject(value) || (SvPOK(value) && ! looks_like_number(value)))) {
470 0 36 PUSHMARK(SP);
471 0 36 EXTEND(SP, 2);
478 0 36 if (! count)
484 0 36 SvGETMAGIC(ret);
486 36 0 ok = SvTRUE(ret);
0 36 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
9 27 ok = SvTRUE(ret);
9 0 ok = SvTRUE(ret);
0 9 ok = SvTRUE(ret);
0 27 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
8 19 ok = SvTRUE(ret);
8 0 ok = SvTRUE(ret);
4 4 ok = SvTRUE(ret);
0 4 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
4 4 ok = SvTRUE(ret);
19 0 ok = SvTRUE(ret);
489 36 0 FREETMPS;
496 17 23 if (! ok) {
543 2137 1137 if ((temp = hv_fetch(spec, "type", 4, 0))) {
546 1 2136 if ( ! ( SvOK(*temp)
1 0 if ( ! ( SvOK(*temp)
0 1 if ( ! ( SvOK(*temp)
2135 0 if ( ! ( SvOK(*temp)
0 2135 if ( ! ( SvOK(*temp)
547 2135 1 && looks_like_number(*temp)
548 0 0 && SvIV(*temp) > 0 ) ) {
552 1 1 if ( SvOK(*temp) ) {
1 0 if ( SvOK(*temp) ) {
0 1 if ( SvOK(*temp) ) {
564 0 2135 SvGETMAGIC(*temp);
566 2135 0 if (! (type & SvIV(*temp))) {
28 2107 if (! (type & SvIV(*temp))) {
577 28 0 allowed = typemask_to_string(SvIV(*temp));
590 40 3204 if ((temp = hv_fetch(spec, "isa", 3, 0))) {
591 0 40 SvGETMAGIC(*temp);
593 4 36 if (SvROK(*temp) && SvTYPE(SvRV(*temp)) == SVt_PVAV) {
4 0 if (SvROK(*temp) && SvTYPE(SvRV(*temp)) == SVt_PVAV) {
596 8 2 for(i = 0; i <= av_len(array); i++) {
600 8 0 if (! package) {
604 0 8 SvGETMAGIC(package);
605 6 0 if (! validate_isa(value, package, id, options)) {
611 20 0 if (! validate_isa(value, *temp, id, options)) {
618 30 3196 if ((temp = hv_fetch(spec, "can", 3, 0))) {
619 0 30 SvGETMAGIC(*temp);
620 12 18 if (SvROK(*temp) && SvTYPE(SvRV(*temp)) == SVt_PVAV) {
12 0 if (SvROK(*temp) && SvTYPE(SvRV(*temp)) == SVt_PVAV) {
623 22 4 for (i = 0; i <= av_len(array); i++) {
627 22 0 if (! method) {
631 0 22 SvGETMAGIC(method);
633 14 0 if (! validate_can(value, method, id, options)) {
639 9 0 if (! validate_can(value, *temp, id, options)) {
646 3040 169 if ((temp = hv_fetch(spec, "callbacks", 9, 0))) {
649 0 3040 SvGETMAGIC(*temp);
650 3040 0 if (!(SvROK(*temp) && SvTYPE(SvRV(*temp)) == SVt_PVHV)) {
0 3040 if (!(SvROK(*temp) && SvTYPE(SvRV(*temp)) == SVt_PVHV)) {
661 3045 3021 while ((he = hv_iternext((HV*) SvRV(*temp)))) {
667 3045 0 if (!(SvROK(HeVAL(he)) && SvTYPE(SvRV(HeVAL(he))) == SVt_PVCV)) {
0 3045 if (!(SvROK(HeVAL(he)) && SvTYPE(SvRV(HeVAL(he))) == SVt_PVCV)) {
671 0 0 sv_catsv(buffer, HeSVKEY_force(he));
0 0 sv_catsv(buffer, HeSVKEY_force(he));
0 0 sv_catsv(buffer, HeSVKEY_force(he));
684 0 3045 PUSHMARK(SP);
685 0 3045 EXTEND(SP, 2);
692 3045 0 sv_setpv(ERRSV, "");
698 0 3045 if (!count) {
703 0 3045 SvGETMAGIC(ret);
704 3045 0 ok = SvTRUE(ret);
0 3045 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
6 3039 ok = SvTRUE(ret);
6 0 ok = SvTRUE(ret);
0 6 ok = SvTRUE(ret);
3033 6 ok = SvTRUE(ret);
3033 0 ok = SvTRUE(ret);
3032 1 ok = SvTRUE(ret);
3019 13 ok = SvTRUE(ret);
0 3019 ok = SvTRUE(ret);
3020 13 ok = SvTRUE(ret);
6 0 ok = SvTRUE(ret);
6 0 ok = SvTRUE(ret);
0 6 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
6 0 ok = SvTRUE(ret);
0 0 ok = SvTRUE(ret);
707 3045 0 SvSetSV_nosteal(err, ERRSV);
3045 0 SvSetSV_nosteal(err, ERRSV);
3045 0 SvSetSV_nosteal(err, ERRSV);
710 3045 0 FREETMPS;
713 19 3026 if (! ok) {
714 1 18 if (SvROK(err)) {
725 18 0 sv_catsv(buffer, HeSVKEY_force(he));
0 18 sv_catsv(buffer, HeSVKEY_force(he));
18 0 sv_catsv(buffer, HeSVKEY_force(he));
727 4 14 if (SvCUR(err) > 0) {
742 9 3181 if ((temp = hv_fetch(spec, "regex", 5, 0))) {
748 0 9 SvGETMAGIC(*temp);
749 6 3 if (SvPOK(*temp)) {
752 6 0 else if (SvROK(*temp)) {
762 6 0 if (SvTYPE(svp) == SVt_REGEXP) {
768 0 9 if (!has_regex) {
778 0 9 PUSHMARK(SP);
779 0 9 EXTEND(SP, 2);
785 9 0 ok = POPi;
788 4 5 if (! ok) {
800 0 3186 if ((temp = hv_fetch(spec, "untaint", 7, 0))) {
801 0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
0 0 if (SvTRUE(*temp)) {
815 121 42 while ((he = hv_iternext(in))) {
816 121 0 if (!hv_store_ent(out, HeSVKEY_force(he),
0 121 if (!hv_store_ent(out, HeSVKEY_force(he),
121 0 if (!hv_store_ent(out, HeSVKEY_force(he),
0 121 if (!hv_store_ent(out, HeSVKEY_force(he),
831 3314 20 if (len > -1 && len % 2 != 1) {
3 3311 if (len > -1 && len % 2 != 1) {
842 3460 3331 for (i = 0; i <= av_len(in); i += 2) {
847 0 3460 if (! key) {
851 1 3459 SvGETMAGIC(key);
859 3460 0 if (value) {
860 0 3460 SvGETMAGIC(value);
863 0 3460 if (! hv_store_ent(out, key, SvREFCNT_inc(value), 0)) {
886 3427 0 pkg = sv_2mortal(newSVpv(HvNAME(stash), 0));
3427 0 pkg = sv_2mortal(newSVpv(HvNAME(stash), 0));
0 3427 pkg = sv_2mortal(newSVpv(HvNAME(stash), 0));
0 0 pkg = sv_2mortal(newSVpv(HvNAME(stash), 0));
3427 0 pkg = sv_2mortal(newSVpv(HvNAME(stash), 0));
0 3427 pkg = sv_2mortal(newSVpv(HvNAME(stash), 0));
889 40 3387 if ((he = hv_fetch_ent(OPTIONS, pkg, 0, 0))) {
891 0 40 SvGETMAGIC(pkg_options);
892 40 0 if (SvROK(pkg_options) && SvTYPE(SvRV(pkg_options)) == SVt_PVHV) {
40 0 if (SvROK(pkg_options) && SvTYPE(SvRV(pkg_options)) == SVt_PVHV) {
893 2 38 if (options) {
901 40 3349 if (options) {
919 9 99 if (normalize_func) {
924 0 9 PUSHMARK(SP);
925 0 9 XPUSHs(copy);
927 0 9 if (! call_sv(SvRV(normalize_func), G_SCALAR)) {
934 1 8 if (! SvOK(normalized)) {
1 0 if (! SvOK(normalized)) {
1 0 if (! SvOK(normalized)) {
935 1 0 croak("The normalize_keys callback did not return a defined value when normalizing the key '%s'", SvPV_nolen(copy));
940 99 0 else if (ignore_case || strip_leading) {
941 42 57 if (ignore_case) {
944 42 0 rawstr = SvPV(copy, len);
945 126 42 for (i = 0; i < len; i++) {
947 69 57 *(rawstr + i) = toLOWER(*(rawstr + i));
951 81 18 if (strip_leading) {
952 48 33 rawstr_sl = SvPV(strip_leading, len_sl);
953 81 0 rawstr = SvPV(copy, len);
955 71 10 if (len > len_sl && strnEQ(rawstr_sl, rawstr, len_sl)) {
3 68 if (len > len_sl && strnEQ(rawstr_sl, rawstr, len_sl)) {
970 50 50 if (!normalize_func && !ignore_case && !strip_leading) {
50 0 if (!normalize_func && !ignore_case && !strip_leading) {
976 108 98 while ((he = hv_iternext(p))) {
978 108 0 normalize_one_key(HeSVKEY_force(he), normalize_func, strip_leading, ignore_case);
0 108 normalize_one_key(HeSVKEY_force(he), normalize_func, strip_leading, ignore_case);
108 0 normalize_one_key(HeSVKEY_force(he), normalize_func, strip_leading, ignore_case);
980 1 106 if (hv_fetch_ent(norm_p, normalized, 0, 0)) {
981 1 0 croak("The normalize_keys callback returned a key that already exists, '%s', when normalizing the key '%s'",
1 0 croak("The normalize_keys callback returned a key that already exists, '%s', when normalizing the key '%s'",
982 1 0 SvPV_nolen(normalized), SvPV_nolen(HeSVKEY_force(he)));
0 1 SvPV_nolen(normalized), SvPV_nolen(HeSVKEY_force(he)));
1 0 SvPV_nolen(normalized), SvPV_nolen(HeSVKEY_force(he)));
1 0 SvPV_nolen(normalized), SvPV_nolen(HeSVKEY_force(he)));
0 1 SvPV_nolen(normalized), SvPV_nolen(HeSVKEY_force(he)));
1 0 SvPV_nolen(normalized), SvPV_nolen(HeSVKEY_force(he)));
0 0 SvPV_nolen(normalized), SvPV_nolen(HeSVKEY_force(he)));
0 0 SvPV_nolen(normalized), SvPV_nolen(HeSVKEY_force(he)));
0 0 SvPV_nolen(normalized), SvPV_nolen(HeSVKEY_force(he)));
985 0 106 if (! hv_store_ent(norm_p, normalized, SvREFCNT_inc(HeVAL(he)), 0)) {
999 44 17 for (p_idx = 0; p_idx <= av_len(p); p_idx++) {
1002 38 6 if (p_spec != NULL && SvROK(*p_spec) &&
19 19 if (p_spec != NULL && SvROK(*p_spec) &&
19 0 if (p_spec != NULL && SvROK(*p_spec) &&
1007 3 16 if (! depends) {
1011 1 2 if (SvROK(*depends)) {
1015 2 0 if (av_len(p) < SvIV(*depends) -1) {
1 1 if (av_len(p) < SvIV(*depends) -1) {
1017 1 0 newSVpvf("Parameter #%d depends on parameter #%d, which was not given",
1047 3186 3153 while ((he = hv_iternext(p))) {
1048 3186 0 he1 = hv_fetch_ent(specs, HeSVKEY_force(he), 0, HeHASH(he));
0 3186 he1 = hv_fetch_ent(specs, HeSVKEY_force(he), 0, HeHASH(he));
3186 0 he1 = hv_fetch_ent(specs, HeSVKEY_force(he), 0, HeHASH(he));
1050 3181 5 if (he1 && SvROK(HeVAL(he1)) &&
3117 64 if (he1 && SvROK(HeVAL(he1)) &&
3117 0 if (he1 && SvROK(HeVAL(he1)) &&
1053 6 3111 if (hv_exists((HV*) SvRV(HeVAL(he1)), "depends", 7)) {
1057 6 0 if (! depends_value) {
1061 2 4 if (! SvROK(*depends_value)) {
1066 1 3 else if (SvTYPE(SvRV(*depends_value)) == SVt_PVAV) {
1073 7 2 for (d_idx =0; d_idx <= av_len(depends_list); d_idx++) {
1080 7 0 if (!hv_exists(p, SvPV_nolen(depend_name),
3 4 if (!hv_exists(p, SvPV_nolen(depend_name),
1087 3 0 if (!hv_exists(specs, SvPV_nolen(depend_name),
0 3 if (!hv_exists(specs, SvPV_nolen(depend_name),
1093 0 0 sv_catsv(buffer, HeSVKEY_force(he1));
0 0 sv_catsv(buffer, HeSVKEY_force(he1));
0 0 sv_catsv(buffer, HeSVKEY_force(he1));
1097 0 0 croak("%s", SvPV_nolen(buffer));
1103 3 0 sv_catsv(buffer, HeSVKEY_force(he1));
0 3 sv_catsv(buffer, HeSVKEY_force(he1));
3 0 sv_catsv(buffer, HeSVKEY_force(he1));
1122 3355 3229 while ((he = hv_iternext(specs))) {
1129 3355 0 if (val && SvROK(val) && SvTYPE(SvRV(val)) == SVt_PVHV) {
3249 106 if (val && SvROK(val) && SvTYPE(SvRV(val)) == SVt_PVHV) {
3249 0 if (val && SvROK(val) && SvTYPE(SvRV(val)) == SVt_PVHV) {
1137 3355 0 if (hv_exists_ent(p, HeSVKEY_force(he), HeHASH(he))) {
0 3355 if (hv_exists_ent(p, HeSVKEY_force(he), HeHASH(he))) {
3355 0 if (hv_exists_ent(p, HeSVKEY_force(he), HeHASH(he))) {
3284 71 if (hv_exists_ent(p, HeSVKEY_force(he), HeHASH(he))) {
1142 50 21 if (spec && (temp = hv_fetch(spec, "default", 7, 0))) {
17 33 if (spec && (temp = hv_fetch(spec, "default", 7, 0))) {
1145 0 17 SvGETMAGIC(*temp);
1149 9 8 if (GIMME_V != G_VOID) {
16 1 if (GIMME_V != G_VOID) {
1150 16 0 if (!hv_store_ent(ret, HeSVKEY_force(he),
0 16 if (!hv_store_ent(ret, HeSVKEY_force(he),
16 0 if (!hv_store_ent(ret, HeSVKEY_force(he),
0 16 if (!hv_store_ent(ret, HeSVKEY_force(he),
1161 38 16 if (! no_validation()) {
1164 25 13 if (spec) {
1165 13 12 if ((temp = hv_fetch(spec, "optional", 8, 0))) {
1166 0 13 SvGETMAGIC(*temp);
1168 13 0 if (SvTRUE(*temp)) continue;
0 13 if (SvTRUE(*temp)) continue;
0 13 if (SvTRUE(*temp)) continue;
0 0 if (SvTRUE(*temp)) continue;
0 0 if (SvTRUE(*temp)) continue;
0 13 if (SvTRUE(*temp)) continue;
0 0 if (SvTRUE(*temp)) continue;
0 0 if (SvTRUE(*temp)) continue;
0 0 if (SvTRUE(*temp)) continue;
0 0 if (SvTRUE(*temp)) continue;
13 0 if (SvTRUE(*temp)) continue;
13 0 if (SvTRUE(*temp)) continue;
0 13 if (SvTRUE(*temp)) continue;
0 0 if (SvTRUE(*temp)) continue;
0 0 if (SvTRUE(*temp)) continue;
13 0 if (SvTRUE(*temp)) continue;
1171 13 0 else if (!SvTRUE(HeVAL(he))) {
0 13 else if (!SvTRUE(HeVAL(he))) {
0 0 else if (!SvTRUE(HeVAL(he))) {
0 13 else if (!SvTRUE(HeVAL(he))) {
0 0 else if (!SvTRUE(HeVAL(he))) {
0 0 else if (!SvTRUE(HeVAL(he))) {
0 13 else if (!SvTRUE(HeVAL(he))) {
0 0 else if (!SvTRUE(HeVAL(he))) {
0 0 else if (!SvTRUE(HeVAL(he))) {
0 0 else if (!SvTRUE(HeVAL(he))) {
0 0 else if (!SvTRUE(HeVAL(he))) {
0 0 else if (!SvTRUE(HeVAL(he))) {
13 0 else if (!SvTRUE(HeVAL(he))) {
13 0 else if (!SvTRUE(HeVAL(he))) {
2 11 else if (!SvTRUE(HeVAL(he))) {
0 2 else if (!SvTRUE(HeVAL(he))) {
0 0 else if (!SvTRUE(HeVAL(he))) {
2 11 else if (!SvTRUE(HeVAL(he))) {
0 0 else if (!SvTRUE(HeVAL(he))) {
1174 23 0 av_push(missing, SvREFCNT_inc(HeSVKEY_force(he)));
0 23 av_push(missing, SvREFCNT_inc(HeSVKEY_force(he)));
23 0 av_push(missing, SvREFCNT_inc(HeSVKEY_force(he)));
1195 56 3286 if ((temp = hv_fetch(options, "ignore_case", 11, 0))) {
1196 0 56 SvGETMAGIC(*temp);
1197 56 0 ignore_case = SvTRUE(*temp);
0 56 ignore_case = SvTRUE(*temp);
0 0 ignore_case = SvTRUE(*temp);
0 56 ignore_case = SvTRUE(*temp);
0 0 ignore_case = SvTRUE(*temp);
0 0 ignore_case = SvTRUE(*temp);
36 20 ignore_case = SvTRUE(*temp);
36 0 ignore_case = SvTRUE(*temp);
36 0 ignore_case = SvTRUE(*temp);
36 0 ignore_case = SvTRUE(*temp);
18 18 ignore_case = SvTRUE(*temp);
18 18 ignore_case = SvTRUE(*temp);
20 0 ignore_case = SvTRUE(*temp);
20 0 ignore_case = SvTRUE(*temp);
16 4 ignore_case = SvTRUE(*temp);
0 16 ignore_case = SvTRUE(*temp);
0 0 ignore_case = SvTRUE(*temp);
4 16 ignore_case = SvTRUE(*temp);
0 0 ignore_case = SvTRUE(*temp);
1200 38 3304 if ((temp = hv_fetch(options, "strip_leading", 13, 0))) {
1201 0 38 SvGETMAGIC(*temp);
1202 0 38 if (SvOK(*temp)) strip_leading = *temp;
0 0 if (SvOK(*temp)) strip_leading = *temp;
0 0 if (SvOK(*temp)) strip_leading = *temp;
1205 42 3300 if ((temp = hv_fetch(options, "normalize_keys", 14, 0))) {
1206 0 42 SvGETMAGIC(*temp);
1207 5 37 if(SvROK(*temp) && SvTYPE(SvRV(*temp)) == SVt_PVCV) {
5 0 if(SvROK(*temp) && SvTYPE(SvRV(*temp)) == SVt_PVCV) {
1212 3316 26 if (normalize_func || ignore_case || strip_leading) {
25 3291 if (normalize_func || ignore_case || strip_leading) {
1218 76 3264 if (no_validation()) {
1219 5 71 if (GIMME_V != G_VOID) {
76 0 if (GIMME_V != G_VOID) {
1220 115 76 while ((he = hv_iternext(p))) {
1222 0 115 if (! hv) {
1226 0 115 SvGETMAGIC(hv);
1229 115 0 if (!hv_store_ent(ret, HeSVKEY_force(he), SvREFCNT_inc(hv),
0 115 if (!hv_store_ent(ret, HeSVKEY_force(he), SvREFCNT_inc(hv),
115 0 if (!hv_store_ent(ret, HeSVKEY_force(he), SvREFCNT_inc(hv),
0 115 if (!hv_store_ent(ret, HeSVKEY_force(he), SvREFCNT_inc(hv),
1241 34 3230 if ((temp = hv_fetch(options, "allow_extra", 11, 0))) {
1242 0 34 SvGETMAGIC(*temp);
1243 34 0 allow_extra = SvTRUE(*temp);
0 34 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 34 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 34 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
34 0 allow_extra = SvTRUE(*temp);
34 0 allow_extra = SvTRUE(*temp);
29 5 allow_extra = SvTRUE(*temp);
0 29 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
5 29 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
1250 3324 3157 while ((he = hv_iternext(p))) {
1252 0 3324 if (! hv) {
1256 0 3324 SvGETMAGIC(hv);
1259 3121 203 if (GIMME_V != G_VOID) {
3243 81 if (GIMME_V != G_VOID) {
1260 3243 0 if (!hv_store_ent(ret, HeSVKEY_force(he), SvREFCNT_inc(hv),
0 3243 if (!hv_store_ent(ret, HeSVKEY_force(he), SvREFCNT_inc(hv),
3243 0 if (!hv_store_ent(ret, HeSVKEY_force(he), SvREFCNT_inc(hv),
0 3243 if (!hv_store_ent(ret, HeSVKEY_force(he), SvREFCNT_inc(hv),
1269 3324 0 he1 = hv_fetch_ent(specs, HeSVKEY_force(he), 0, HeHASH(he));
0 3324 he1 = hv_fetch_ent(specs, HeSVKEY_force(he), 0, HeHASH(he));
3324 0 he1 = hv_fetch_ent(specs, HeSVKEY_force(he), 0, HeHASH(he));
1270 3293 31 if(he1) {
1272 3225 68 if (SvROK(hv1) && SvTYPE(SvRV(hv1)) == SVt_PVHV) {
3225 0 if (SvROK(hv1) && SvTYPE(SvRV(hv1)) == SVt_PVHV) {
1278 0 3225 buffer = form("The '%s' parameter (%%s)", HePV(he, PL_na));
0 0 buffer = form("The '%s' parameter (%%s)", HePV(he, PL_na));
1280 0 3144 if (! validate_one_param(hv, (SV*) p, spec, buffer, options, &untaint))
1285 0 3144 if (untaint) {
1286 0 0 av_push(untaint_keys, SvREFCNT_inc(HeSVKEY_force(he1)));
0 0 av_push(untaint_keys, SvREFCNT_inc(HeSVKEY_force(he1)));
0 0 av_push(untaint_keys, SvREFCNT_inc(HeSVKEY_force(he1)));
1290 26 5 else if (! allow_extra) {
1291 26 0 av_push(unmentioned, SvREFCNT_inc(HeSVKEY_force(he)));
0 26 av_push(unmentioned, SvREFCNT_inc(HeSVKEY_force(he)));
26 0 av_push(unmentioned, SvREFCNT_inc(HeSVKEY_force(he)));
1294 26 3217 if (av_len(unmentioned) > -1) {
1298 0 26 if (av_len(unmentioned) != 0) {
1308 0 26 if (av_len(unmentioned) != 0) {
1315 26 26 for(i = 0; i <= av_len(unmentioned); i++) {
1317 0 26 if (i < av_len(unmentioned)) {
1334 13 3140 if (av_len(missing) > -1) {
1342 4 9 if (av_len(missing) > 0) {
1349 23 13 for(i = 0; i <= av_len(missing); i++) {
1350 23 0 sv_catpvf(buffer, "'%s'",
1352 10 13 if (i < av_len(missing)) {
1364 3068 72 if (GIMME_V != G_VOID) {
3108 32 if (GIMME_V != G_VOID) {
1365 0 3108 for (i = 0; i <= av_len(untaint_keys); i++) {
1366 0 0 SvTAINTED_off(HeVAL(hv_fetch_ent(p, *av_fetch(untaint_keys, i, 0), 0, 0)));
1379 0 21 if ((temp = hv_fetch(options, "allow_extra", 11, 0))) {
1380 0 0 SvGETMAGIC(*temp);
1381 0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
1388 19 2 if (pnum != 0) {
1396 21 0 if (!allow_extra) {
1397 16 5 if (min != max) {
1407 0 21 if ((allow_extra ? min : max) != 0) {
18 3 if ((allow_extra ? min : max) != 0) {
1424 78 47 if (complex_spec) {
1425 29 49 if ((temp = hv_fetch((HV*) SvRV(spec), "optional", 8, 0))) {
1426 0 29 SvGETMAGIC(*temp);
1427 29 0 if (!SvTRUE(*temp))
0 29 if (!SvTRUE(*temp))
0 0 if (!SvTRUE(*temp))
0 29 if (!SvTRUE(*temp))
0 0 if (!SvTRUE(*temp))
0 0 if (!SvTRUE(*temp))
0 29 if (!SvTRUE(*temp))
0 0 if (!SvTRUE(*temp))
0 0 if (!SvTRUE(*temp))
0 0 if (!SvTRUE(*temp))
0 0 if (!SvTRUE(*temp))
0 0 if (!SvTRUE(*temp))
29 0 if (!SvTRUE(*temp))
29 0 if (!SvTRUE(*temp))
0 29 if (!SvTRUE(*temp))
0 0 if (!SvTRUE(*temp))
0 0 if (!SvTRUE(*temp))
0 29 if (!SvTRUE(*temp))
0 0 if (!SvTRUE(*temp))
1435 47 0 if (SvTRUE(spec)) {
0 47 if (SvTRUE(spec)) {
0 47 if (SvTRUE(spec)) {
0 0 if (SvTRUE(spec)) {
0 0 if (SvTRUE(spec)) {
0 47 if (SvTRUE(spec)) {
0 0 if (SvTRUE(spec)) {
0 0 if (SvTRUE(spec)) {
0 0 if (SvTRUE(spec)) {
0 0 if (SvTRUE(spec)) {
47 0 if (SvTRUE(spec)) {
47 0 if (SvTRUE(spec)) {
13 34 if (SvTRUE(spec)) {
0 13 if (SvTRUE(spec)) {
0 0 if (SvTRUE(spec)) {
13 34 if (SvTRUE(spec)) {
1456 57 25 if (no_validation()) {
1461 1 24 if (GIMME_V == G_VOID) {
25 0 if (GIMME_V == G_VOID) {
1465 62 25 for (i = 0; i <= max; i++) {
1466 58 4 if (i <= spec_count) {
1468 58 0 if (spec) {
1469 0 58 SvGETMAGIC(spec);
1471 35 23 complex_spec = (SvROK(spec) && SvTYPE(SvRV(spec)) == SVt_PVHV);
0 35 complex_spec = (SvROK(spec) && SvTYPE(SvRV(spec)) == SVt_PVHV);
1474 36 26 if (i <= av_len(p)) {
1476 0 36 SvGETMAGIC(value);
1478 15 11 } else if (complex_spec &&
6 9 } else if (complex_spec &&
1480 0 6 SvGETMAGIC(*temp);
1488 105 35 for (i = 0; i <= av_len(specs); i++) {
1490 0 105 if (! spec) {
1493 0 105 SvGETMAGIC(spec);
1494 70 35 complex_spec = (SvROK(spec) && SvTYPE(SvRV(spec)) == SVt_PVHV);
0 70 complex_spec = (SvROK(spec) && SvTYPE(SvRV(spec)) == SVt_PVHV);
1499 75 30 if (! spec_says_optional(spec, complex_spec) ) {
1503 72 33 if (i <= av_len(p)) {
1505 1 71 SvGETMAGIC(value);
1507 49 23 if (complex_spec) {
1512 0 42 if (! validate_one_param(value, (SV*) p, (HV*) SvRV(spec), buffer, options, &untaint)) {
1516 0 42 if (untaint) {
1521 11 54 if (GIMME_V != G_VOID) {
54 11 if (GIMME_V != G_VOID) {
1525 21 12 } else if (complex_spec &&
7 14 } else if (complex_spec &&
1527 0 7 SvGETMAGIC(*temp);
1529 3 4 if (GIMME_V != G_VOID) {
7 0 if (GIMME_V != G_VOID) {
1535 15 11 if (i == min) {
1542 20 3 for (i++ ; i <= av_len(specs); i++) {
1544 0 20 if (! spec) {
1548 0 20 SvGETMAGIC(spec);
1549 8 12 complex_spec = (SvROK(spec) && SvTYPE(SvRV(spec)) == SVt_PVHV);
0 8 complex_spec = (SvROK(spec) && SvTYPE(SvRV(spec)) == SVt_PVHV);
1550 8 12 if (! spec_says_optional(spec, complex_spec)) {
1553 8 12 if (min != i)
1567 8 25 if (av_len(p) > av_len(specs)) {
1568 2 6 if ((temp = hv_fetch(options, "allow_extra", 11, 0))) {
1569 0 2 SvGETMAGIC(*temp);
1570 2 0 allow_extra = SvTRUE(*temp);
0 2 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 2 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 2 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
2 0 allow_extra = SvTRUE(*temp);
2 0 allow_extra = SvTRUE(*temp);
0 2 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
2 0 allow_extra = SvTRUE(*temp);
0 0 allow_extra = SvTRUE(*temp);
1575 2 6 if (allow_extra) {
1577 0 2 if (GIMME_V != G_VOID) {
2 0 if (GIMME_V != G_VOID) {
1578 2 2 for(i = av_len(specs) + 1; i <= av_len(p); i++) {
1580 2 0 if (value) {
1581 0 2 SvGETMAGIC(value);
1596 7 20 if (GIMME_V != G_VOID) {
22 5 if (GIMME_V != G_VOID) {
1597 0 22 for (i = 0; i <= av_len(untaint_indexes); i++) {
1598 0 0 SvTAINTED_off(*av_fetch(p, SvIV(*av_fetch(untaint_indexes, i, 0)), 0));
0 0 SvTAINTED_off(*av_fetch(p, SvIV(*av_fetch(untaint_indexes, i, 0)), 0));
1622 82 3237 if (no_validation() && GIMME_V == G_VOID) {
9 73 if (no_validation() && GIMME_V == G_VOID) {
10 72 if (no_validation() && GIMME_V == G_VOID) {
1626 0 3309 SvGETMAGIC(p);
1627 3309 0 if (! (SvROK(p) && SvTYPE(SvRV(p)) == SVt_PVAV)) {
0 3309 if (! (SvROK(p) && SvTYPE(SvRV(p)) == SVt_PVAV)) {
1631 0 3309 SvGETMAGIC(specs);
1632 3309 0 if (! (SvROK(specs) && SvTYPE(SvRV(specs)) == SVt_PVHV)) {
0 3309 if (! (SvROK(specs) && SvTYPE(SvRV(specs)) == SVt_PVHV)) {
1638 11 3298 if (av_len(pa) == 0) {
1644 11 0 if (value) {
1645 0 11 SvGETMAGIC(value);
1646 8 3 if (SvROK(value) && SvTYPE(SvRV(value)) == SVt_PVHV) {
8 0 if (SvROK(value) && SvTYPE(SvRV(value)) == SVt_PVHV) {
1654 3301 8 if (! ph) {
1661 0 3298 if (!ok) {
1665 3085 221 if (GIMME_V != G_VOID) {
3239 67 if (GIMME_V != G_VOID) {
1673 0 3189 if (! ok) {
1677 3046 143 RETURN_HASH(ret);
3155 0 RETURN_HASH(ret);
0 3155 RETURN_HASH(ret);
3227 0 RETURN_HASH(ret);
0 3227 RETURN_HASH(ret);
3227 0 RETURN_HASH(ret);
3227 3155 RETURN_HASH(ret);
0 4 RETURN_HASH(ret);
1692 24 54 if (no_validation() && GIMME_V == G_VOID) {
0 24 if (no_validation() && GIMME_V == G_VOID) {
0 24 if (no_validation() && GIMME_V == G_VOID) {
1696 0 78 SvGETMAGIC(p);
1697 78 0 if (!SvROK(p) || !(SvTYPE(SvRV(p)) == SVt_PVAV)) {
0 78 if (!SvROK(p) || !(SvTYPE(SvRV(p)) == SVt_PVAV)) {
1703 179 78 for(i = 1; i < items; i++) {
1704 0 179 if (!av_store(specs, i - 1, SvREFCNT_inc(ST(i)))) {
1710 8 70 if (GIMME_V != G_VOID) {
71 7 if (GIMME_V != G_VOID) {
1718 0 49 if (! ok) {
1722 5 44 RETURN_ARRAY(ret);
43 0 RETURN_ARRAY(ret);
0 43 RETURN_ARRAY(ret);
68 43 RETURN_ARRAY(ret);
0 2 RETURN_ARRAY(ret);
1735 11 34 if (no_validation() && GIMME_V == G_VOID) XSRETURN(0);
11 0 if (no_validation() && GIMME_V == G_VOID) XSRETURN(0);
5 6 if (no_validation() && GIMME_V == G_VOID) XSRETURN(0);
1739 109 40 for(i = 0; i < items; i += 2) {
1744 109 0 if (i + 1 < items) {
1750 0 109 if (! hv_store_ent(p, key, SvREFCNT_inc(value), 0)) {
1757 0 40 SvGETMAGIC(params);
1759 0 40 SvGETMAGIC(spec);
1761 40 0 if (SvROK(spec) && SvTYPE(SvRV(spec)) == SVt_PVAV) {
4 36 if (SvROK(spec) && SvTYPE(SvRV(spec)) == SVt_PVAV) {
1762 4 0 if (SvROK(params) && SvTYPE(SvRV(params)) == SVt_PVAV) {
4 0 if (SvROK(params) && SvTYPE(SvRV(params)) == SVt_PVAV) {
1765 4 0 if (GIMME_V != G_VOID) {
2 2 if (GIMME_V != G_VOID) {
1773 0 3 if (! ok) {
1777 3 0 RETURN_ARRAY(ret);
2 0 RETURN_ARRAY(ret);
0 2 RETURN_ARRAY(ret);
4 2 RETURN_ARRAY(ret);
0 0 RETURN_ARRAY(ret);
1783 36 0 else if (SvROK(spec) && SvTYPE(SvRV(spec)) == SVt_PVHV) {
36 0 else if (SvROK(spec) && SvTYPE(SvRV(spec)) == SVt_PVHV) {
1790 36 0 if (SvROK(params) && SvTYPE(SvRV(params)) == SVt_PVHV) {
35 1 if (SvROK(params) && SvTYPE(SvRV(params)) == SVt_PVHV) {
1793 35 0 else if (SvROK(params) && SvTYPE(SvRV(params)) == SVt_PVAV) {
35 0 else if (SvROK(params) && SvTYPE(SvRV(params)) == SVt_PVAV) {
1798 2 33 if (av_len((AV*) SvRV(params)) == 0) {
1803 2 0 if (first_elem && SvROK(*first_elem) &&
2 0 if (first_elem && SvROK(*first_elem) &&
2 0 if (first_elem && SvROK(*first_elem) &&
1811 33 2 if (! hv_set) {
1818 0 33 if (!ok) {
1827 36 0 if (GIMME_V != G_VOID) {
33 3 if (GIMME_V != G_VOID) {
1835 0 27 if (! ok) {
1839 27 0 RETURN_HASH(ret);
21 0 RETURN_HASH(ret);
0 21 RETURN_HASH(ret);
25 0 RETURN_HASH(ret);
0 25 RETURN_HASH(ret);
25 0 RETURN_HASH(ret);
25 21 RETURN_HASH(ret);
0 4 RETURN_HASH(ret);