Branch Coverage

lib/meta.xs
Criterion Covered Total %
branch 258 488 52.8


line true false branch
125 5 0 static SV *S_wrap_cv_signature(pTHX_ CV *cv, OP *op, U32 flags)
161 5 0 if(SvFAKE(gv) ||
162 4 1 GvSV(gv) ||
163 4 0 GvAV(gv) ||
164 4 0 GvHV(gv) ||
165 4 0 GvCV(gv) ||
166 4 0 GvIO(gv) ||
4 0 GvIO(gv) ||
167 0 4 GvFORM(gv))
197 0 13 EXTEND(SP, 1);
198 0 13 PUSHMARK(SP);
214 0 46 EXTEND(SP, 3);
215 0 46 PUSHMARK(SP);
279 0 0 case SVt_PVCV: ret = (SV *)GvCVu(gv); break;
282 2 2 if(ret)
306 31 2 for(/**/; s > namepv; s--) {
307 2 29 if(s[0] != ':' || s[1] != ':')
1 1 if(s[0] != ':' || s[1] != ':')
319 3 0 if(pkgnamepvp) *pkgnamepvp = pkgnamepv;
320 3 0 if(pkgnamelenp) *pkgnamelenp = pkgnamelen;
321 3 0 if(basenamepvp) *basenamepvp = basenamepv;
322 3 0 if(basenamelenp) *basenamelenp = basenamelen;
347 0 9 if(!SvROK(ref))
359 0 26 if(SvROK(cls))
373 3 0 RETVAL = HvSTASH_IS_CLASS(stash);
2 1 RETVAL = HvSTASH_IS_CLASS(stash);
387 6 0 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
6 0 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
0 6 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
0 0 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
0 6 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
6 0 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
6 0 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
6 0 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
0 6 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
0 0 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
0 6 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
6 0 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
6 0 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
0 6 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
0 0 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
0 6 RETVAL = newSVpvn_flags(HvNAME(stash), HvNAMELEN(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0);
400 0 9 if(ix == GET_OR_UNDEF_WITH_WARNING)
404 3 6 if(he) {
411 1 0 croak("Package " templatePVf_QUOTEDPREFIX " does not contain a glob called " templateSVf_QUOTEDPREFIX,
1 0 croak("Package " templatePVf_QUOTEDPREFIX " does not contain a glob called " templateSVf_QUOTEDPREFIX,
0 1 croak("Package " templatePVf_QUOTEDPREFIX " does not contain a glob called " templateSVf_QUOTEDPREFIX,
0 0 croak("Package " templatePVf_QUOTEDPREFIX " does not contain a glob called " templateSVf_QUOTEDPREFIX,
0 1 croak("Package " templatePVf_QUOTEDPREFIX " does not contain a glob called " templateSVf_QUOTEDPREFIX,
435 0 47 if(ix == GET_OR_UNDEF_WITH_WARNING)
440 17 30 if(create) {
441 10 7 if(value && !SvROK(value))
0 10 if(value && !SvROK(value))
445 0 30 if(value)
453 10 37 if(value) {
460 0 4 if(SvTYPE(valuesv) > SVt_PVMG)
464 0 2 if(SvTYPE(valuesv) != SVt_PVAV)
468 0 2 if(SvTYPE(valuesv) != SVt_PVHV)
472 0 2 if(SvTYPE(valuesv) != SVt_PVCV)
483 30 17 HE *he = hv_fetch_ent(stash, basename, create ? GV_ADD : 0, 0);
484 5 42 if(!he)
488 17 25 if(create && SvTYPE(sv) != SVt_PVGV) {
11 6 if(create && SvTYPE(sv) != SVt_PVGV) {
493 42 0 if(SvTYPE(sv) == SVt_PVGV) {
500 14 2 case '&': ret = (SV *)GvCVu(gv); break;
503 0 0 else if(SvROK(sv)) {
508 0 0 case '$': ret = (SvTYPE(rv) <= SVt_PVMG) ? rv : NULL; break;
509 0 0 case '@': ret = (SvTYPE(rv) == SVt_PVAV) ? rv : NULL; break;
510 0 0 case '%': ret = (SvTYPE(rv) == SVt_PVHV) ? rv : NULL; break;
511 0 0 case '&': ret = (SvTYPE(rv) == SVt_PVCV) ? rv : NULL; break;
517 1 41 if(ix == ADD_OR_THROW && ret)
518 1 0 croak("Package " templatePVf_QUOTEDPREFIX " already contains a symbol named " templateSVf_QUOTEDPREFIX,
1 0 croak("Package " templatePVf_QUOTEDPREFIX " already contains a symbol named " templateSVf_QUOTEDPREFIX,
0 1 croak("Package " templatePVf_QUOTEDPREFIX " already contains a symbol named " templateSVf_QUOTEDPREFIX,
0 0 croak("Package " templatePVf_QUOTEDPREFIX " already contains a symbol named " templateSVf_QUOTEDPREFIX,
0 1 croak("Package " templatePVf_QUOTEDPREFIX " already contains a symbol named " templateSVf_QUOTEDPREFIX,
521 26 15 if(!ret && create) {
529 2 3 if(!ret)
531 5 0 GvSV(gv) = SvREFCNT_inc(ret);
534 2 2 if(!ret)
536 4 0 GvAV(gv) = (AV *)SvREFCNT_inc(ret);
539 2 2 if(!ret)
541 4 0 GvHV(gv) = (HV *)SvREFCNT_inc(ret);
544 0 2 if(!ret)
553 24 4 if(ret)
554 35 2 RETVAL = (GIMME_V != G_VOID) ? wrap_sv_refsv(ret) : &PL_sv_undef;
557 2 0 croak("Package " templatePVf_QUOTEDPREFIX " has no symbol named " templateSVf_QUOTEDPREFIX,
2 0 croak("Package " templatePVf_QUOTEDPREFIX " has no symbol named " templateSVf_QUOTEDPREFIX,
0 2 croak("Package " templatePVf_QUOTEDPREFIX " has no symbol named " templateSVf_QUOTEDPREFIX,
0 0 croak("Package " templatePVf_QUOTEDPREFIX " has no symbol named " templateSVf_QUOTEDPREFIX,
0 2 croak("Package " templatePVf_QUOTEDPREFIX " has no symbol named " templateSVf_QUOTEDPREFIX,
577 1 0 if(!SvROK(value) || SvTYPE(SvRV(value)) != SVt_PVCV)
0 1 if(!SvROK(value) || SvTYPE(SvRV(value)) != SVt_PVCV)
586 1 0 if(SvTYPE(sv) != SVt_PVGV) {
594 1 0 if(GvCVu(gv))
0 1 if(GvCVu(gv))
595 0 0 croak("Package " templatePVf_QUOTEDPREFIX " already contains symbol named &" templateSVf_QUOTEDPREFIX,
0 0 croak("Package " templatePVf_QUOTEDPREFIX " already contains symbol named &" templateSVf_QUOTEDPREFIX,
0 0 croak("Package " templatePVf_QUOTEDPREFIX " already contains symbol named &" templateSVf_QUOTEDPREFIX,
0 0 croak("Package " templatePVf_QUOTEDPREFIX " already contains symbol named &" templateSVf_QUOTEDPREFIX,
0 0 croak("Package " templatePVf_QUOTEDPREFIX " already contains symbol named &" templateSVf_QUOTEDPREFIX,
617 1 6 if(!he)
621 6 0 if(SvTYPE(sv) == SVt_PVGV) {
636 1 0 sv = (SV *)GvCVu(gv); GvCV_set(gv, NULL);
641 1 5 if(!sv)
643 2 0 croak("Cannot remove non-existing symbol " templateSVf_QUOTEDPREFIX " from package " templatePVf_QUOTEDPREFIX,
2 0 croak("Cannot remove non-existing symbol " templateSVf_QUOTEDPREFIX " from package " templatePVf_QUOTEDPREFIX,
0 2 croak("Cannot remove non-existing symbol " templateSVf_QUOTEDPREFIX " from package " templatePVf_QUOTEDPREFIX,
0 0 croak("Cannot remove non-existing symbol " templateSVf_QUOTEDPREFIX " from package " templatePVf_QUOTEDPREFIX,
0 2 croak("Cannot remove non-existing symbol " templateSVf_QUOTEDPREFIX " from package " templatePVf_QUOTEDPREFIX,
651 4 1 if(gv_is_empty(gv))
654 0 0 else if(SvROK(sv)) {
659 0 0 case '$': if(SvTYPE(rv) > SVt_PVMG) goto missing; break;
660 0 0 case '@': if(SvTYPE(rv) != SVt_PVAV) goto missing; break;
661 0 0 case '%': if(SvTYPE(rv) != SVt_PVHV) goto missing; break;
662 0 0 case '&': if(SvTYPE(rv) != SVt_PVCV) goto missing; break;
683 57 3 while((he = hv_iternext(stash))) {
686 38 19 if(ix) {
688 0 38 const char *keypv = HePV(he, keylen);
689 38 0 bool is_subpackage = keylen > 2 && keypv[keylen-2] == ':' && keypv[keylen-1] == ':';
12 26 bool is_subpackage = keylen > 2 && keypv[keylen-2] == ':' && keypv[keylen-1] == ':';
0 12 bool is_subpackage = keylen > 2 && keypv[keylen-2] == ':' && keypv[keylen-1] == ':';
690 6 32 if(ix == 1 && is_subpackage)
692 13 19 if(ix == 2 && !is_subpackage)
695 0 38 EXTEND(SP, 1);
707 2 0 const char *sigilfilter = sigils && SvOK(sigils) ? SvPV_nolen(sigils) : NULL;
1 1 const char *sigilfilter = sigils && SvOK(sigils) ? SvPV_nolen(sigils) : NULL;
712 808 2 while((he = hv_iternext(stash))) {
714 0 808 const char *keypv = HePV(he, keylen);
715 732 76 bool is_subpackage = keylen > 2 && keypv[keylen-2] == ':' && keypv[keylen-1] == ':';
140 592 bool is_subpackage = keylen > 2 && keypv[keylen-2] == ':' && keypv[keylen-1] == ':';
140 0 bool is_subpackage = keylen > 2 && keypv[keylen-2] == ':' && keypv[keylen-1] == ':';
731 668 0 if(SvTYPE(sv) == SVt_PVGV) {
734 462 206 PUSH_SVREF_IF(GvSV (gv), '$');
231 231 PUSH_SVREF_IF(GvSV (gv), '$');
231 0 PUSH_SVREF_IF(GvSV (gv), '$');
0 462 PUSH_SVREF_IF(GvSV (gv), '$');
0 462 PUSH_SVREF_IF(GvSV (gv), '$');
0 462 PUSH_SVREF_IF(GvSV (gv), '$');
735 8 660 PUSH_SVREF_IF(GvAV (gv), '@');
4 4 PUSH_SVREF_IF(GvAV (gv), '@');
0 4 PUSH_SVREF_IF(GvAV (gv), '@');
0 4 PUSH_SVREF_IF(GvAV (gv), '@');
0 4 PUSH_SVREF_IF(GvAV (gv), '@');
0 4 PUSH_SVREF_IF(GvAV (gv), '@');
736 10 658 PUSH_SVREF_IF(GvHV (gv), '%');
5 5 PUSH_SVREF_IF(GvHV (gv), '%');
0 5 PUSH_SVREF_IF(GvHV (gv), '%');
0 5 PUSH_SVREF_IF(GvHV (gv), '%');
0 5 PUSH_SVREF_IF(GvHV (gv), '%');
0 5 PUSH_SVREF_IF(GvHV (gv), '%');
737 668 0 PUSH_SVREF_IF(GvCVu(gv), '&');
188 480 PUSH_SVREF_IF(GvCVu(gv), '&');
94 94 PUSH_SVREF_IF(GvCVu(gv), '&');
0 94 PUSH_SVREF_IF(GvCVu(gv), '&');
0 94 PUSH_SVREF_IF(GvCVu(gv), '&');
0 94 PUSH_SVREF_IF(GvCVu(gv), '&');
0 94 PUSH_SVREF_IF(GvCVu(gv), '&');
739 0 0 else if(SvROK(sv)) {
744 0 0 PUSH_SVREF_IF(type <= SVt_PVMG ? rv : NULL, '$');
0 0 PUSH_SVREF_IF(type <= SVt_PVMG ? rv : NULL, '$');
0 0 PUSH_SVREF_IF(type <= SVt_PVMG ? rv : NULL, '$');
0 0 PUSH_SVREF_IF(type <= SVt_PVMG ? rv : NULL, '$');
0 0 PUSH_SVREF_IF(type <= SVt_PVMG ? rv : NULL, '$');
0 0 PUSH_SVREF_IF(type <= SVt_PVMG ? rv : NULL, '$');
745 0 0 PUSH_SVREF_IF(type == SVt_PVAV ? rv : NULL, '@');
0 0 PUSH_SVREF_IF(type == SVt_PVAV ? rv : NULL, '@');
0 0 PUSH_SVREF_IF(type == SVt_PVAV ? rv : NULL, '@');
0 0 PUSH_SVREF_IF(type == SVt_PVAV ? rv : NULL, '@');
0 0 PUSH_SVREF_IF(type == SVt_PVAV ? rv : NULL, '@');
0 0 PUSH_SVREF_IF(type == SVt_PVAV ? rv : NULL, '@');
746 0 0 PUSH_SVREF_IF(type == SVt_PVHV ? rv : NULL, '%');
0 0 PUSH_SVREF_IF(type == SVt_PVHV ? rv : NULL, '%');
0 0 PUSH_SVREF_IF(type == SVt_PVHV ? rv : NULL, '%');
0 0 PUSH_SVREF_IF(type == SVt_PVHV ? rv : NULL, '%');
0 0 PUSH_SVREF_IF(type == SVt_PVHV ? rv : NULL, '%');
0 0 PUSH_SVREF_IF(type == SVt_PVHV ? rv : NULL, '%');
747 0 0 PUSH_SVREF_IF(type == SVt_PVCV ? rv : NULL, '&');
0 0 PUSH_SVREF_IF(type == SVt_PVCV ? rv : NULL, '&');
0 0 PUSH_SVREF_IF(type == SVt_PVCV ? rv : NULL, '&');
0 0 PUSH_SVREF_IF(type == SVt_PVCV ? rv : NULL, '&');
0 0 PUSH_SVREF_IF(type == SVt_PVCV ? rv : NULL, '&');
0 0 PUSH_SVREF_IF(type == SVt_PVCV ? rv : NULL, '&');
764 19 1 while((he = hv_iternext(stash))) {
766 0 19 const char *keypv = HePV(he, keylen);
767 19 0 bool is_subpackage = keylen > 2 && keypv[keylen-2] == ':' && keypv[keylen-1] == ':';
6 13 bool is_subpackage = keylen > 2 && keypv[keylen-2] == ':' && keypv[keylen-1] == ':';
0 6 bool is_subpackage = keylen > 2 && keypv[keylen-2] == ':' && keypv[keylen-1] == ':';
768 13 6 if(!is_subpackage)
775 0 6 EXTEND(SP, 2);
778 0 6 if(HeUTF8(he))
0 6 if(HeUTF8(he))
803 0 2 RETVAL = SvTYPE(sv) <= SVt_PVMG;
818 4 8 RETVAL = SvTYPE(sv) == ix;
843 0 6 if(SvROK(cls))
849 5 1 GV *gv = gv_fetchsv(globname, create ? GV_ADDMULTI : 0, SVt_PVGV);
850 3 3 if(gv) {
885 0 1 if(ix == GET_OR_UNDEF_WITH_WARNING)
897 0 1 if(ix == GET_OR_UNDEF_WITH_WARNING)
909 0 2 if(ix == GET_OR_UNDEF_WITH_WARNING)
921 0 0 if(ix == GET_OR_UNDEF_WITH_WARNING)
933 0 5 if(GIMME_V == G_VOID)
942 1 4 if(SvTYPE(sv) <= SVt_PVMG) {
944 0 1 XPUSHs(ret);
947 2 2 else if(SvTYPE(sv) == SVt_PVAV) {
952 1 1 if(GIMME_V == G_SCALAR) {
953 0 1 mXPUSHu(count);
956 0 1 EXTEND(SP, count);
958 3 1 for(i = 0; i < count; i++)
962 2 0 else if(SvTYPE(sv) == SVt_PVHV) {
970 4 2 while((he = hv_iternext(hv))) {
971 0 4 SV *key = HeSVKEY(he);
972 0 0 if(!key)
975 2 2 if(gimme == G_LIST) {
976 0 2 EXTEND(SP, 2);
983 1 1 if(gimme == G_LIST)
1001 2 1 RETVAL = CvIsMETHOD(cv);
1017 5 0 if(!gv)
1020 5 0 RETVAL = newSVpvf("%s::%s", HvNAME(GvSTASH(gv)), GvNAME(gv));
5 0 RETVAL = newSVpvf("%s::%s", HvNAME(GvSTASH(gv)), GvNAME(gv));
0 5 RETVAL = newSVpvf("%s::%s", HvNAME(GvSTASH(gv)), GvNAME(gv));
0 0 RETVAL = newSVpvf("%s::%s", HvNAME(GvSTASH(gv)), GvNAME(gv));
0 5 RETVAL = newSVpvf("%s::%s", HvNAME(GvSTASH(gv)), GvNAME(gv));
1040 1 2 if(pkgnamelen)
1068 3 0 if(!SvPOK(cv))
1071 3 0 RETVAL = newSVpvn_flags(CvPROTO(cv), CvPROTOLEN(cv), SvUTF8(cv));
0 3 RETVAL = newSVpvn_flags(CvPROTO(cv), CvPROTOLEN(cv), SvUTF8(cv));
3 0 RETVAL = newSVpvn_flags(CvPROTO(cv), CvPROTOLEN(cv), SvUTF8(cv));
0 3 RETVAL = newSVpvn_flags(CvPROTO(cv), CvPROTOLEN(cv), SvUTF8(cv));
1082 2 0 if(SvOK(proto))
1100 0 6 if(CvISXSUB(cv))
1104 0 6 if(!oproot)
1120 26 0 while(o) {
1121 5 21 if(o->op_type == OP_NULL)
1123 9 12 else if(o->op_type == OP_LINESEQ)
1124 9 0 o = (o->op_flags & OPf_KIDS) ? cUNOPo->op_first : NULL;
1125 6 6 else if(o->op_type == OP_NEXTSTATE || o->op_type == OP_DBSTATE)
1126 5 1 o = OpSIBLING(o);
1128 1 5 else if(o->op_type == OP_METHSTART)
1129 1 0 o = OpSIBLING(o), flags |= CVSIGNATURE_IS_METHOD;
1135 1 5 if(!o)
1138 0 5 if(o->op_type == OP_ARGCHECK
1219 2 2 RETVAL = slurpy ? newSVpvf("%c", slurpy) : &PL_sv_undef;
1244 2 1 RETVAL = (slurpy || n_named) ? &PL_sv_undef : newSViv(params);