Branch Coverage

Declare.xs
Criterion Covered Total %
branch 216 360 60.0


line true false branch
14 62 106 if (!SvOK(attr_sv)) return 0;
18 133 69 while (p < end) {
20 36 97 STRLEN seg = comma ? (STRLEN)(comma - p) : (STRLEN)(end - p);
21 37 96 if (seg == nlen && memEQ(p, name, nlen)) return 1;
37 0 if (seg == nlen && memEQ(p, name, nlen)) return 1;
37 0 24 if (!SvOK(val)) return false;
38 6 18 if (etd->flags_mask >= 0) {
40 0 6 if (!SvIOK(val) && !(SvPOK(val) && looks_like_number(val)))
0 0 if (!SvIOK(val) && !(SvPOK(val) && looks_like_number(val)))
0 0 if (!SvIOK(val) && !(SvPOK(val) && looks_like_number(val)))
43 6 0 return iv >= 0 && (iv & ~etd->flags_mask) == 0;
4 2 return iv >= 0 && (iv & ~etd->flags_mask) == 0;
57 0 24 if (!SvOK(val)) return val;
59 10 14 if (hv_exists(etd->val2name, pv, len))
63 11 27 for (i = 0; i < len; i++) lc[i] = toLOWER(lc[i]);
38 14 for (i = 0; i < len; i++) lc[i] = toLOWER(lc[i]);
66 5 9 if (found) return sv_mortalcopy(*found);
75 0 1288 if (c == -1) break;
76 1288 0 if (!isALNUM(c) && c != '_') break;
219 1069 if (!isALNUM(c) && c != '_') break;
219 0 if (!isALNUM(c) && c != '_') break;
80 0 219 if (SvCUR(buf) == 0) {
90 47 47 while (c == ':') {
95 0 47 if (!a) croak("Expected attribute name after ':'");
96 35 12 if (attr_sv == &PL_sv_undef) {
117 0 64 if (c == -1) croak("Unterminated string in enum declaration");
118 0 64 if (c == '\\' && quote == '"') {
0 0 if (c == '\\' && quote == '"') {
120 0 0 if (next == -1) croak("Unterminated string in enum declaration");
122 11 53 } else if (c == quote) {
136 1 13 if (c == '-') {
142 0 14 if (!isDIGIT(c))
147 49 0 if (c == -1 || !isDIGIT(c)) break;
35 14 if (c == -1 || !isDIGIT(c)) break;
153 1 13 if (is_neg) ival = -ival;
162 0 37 if (c != '{') croak("Expected '{' after enum name");
168 37 120 if (c == '}') { lex_read_unichar(0); break; }
169 0 120 if (c == -1) croak("Unexpected end of input in enum declaration");
171 0 120 if (!vname) croak("Expected variant name in enum declaration");
175 25 95 if (c == '=') {
179 17 8 if (c == '"' || c == '\'') {
3 14 if (c == '"' || c == '\'') {
188 83 37 if (lex_peek_unichar(0) == ',') lex_read_unichar(0);
209 120 37 for (i = 0; i < pair_count; i += 2) {
212 120 0 SV *vname = name_p ? *name_p : &PL_sv_undef;
213 120 0 SV *vval = val_p ? *val_p : &PL_sv_undef;
218 25 95 if (SvOK(vval)) {
219 11 14 if (is_str) {
225 24 71 } else if (is_str) {
230 24 94 for (j = 0; j < vname_len; j++) lc[j] = toLOWER(lc[j]);
118 24 for (j = 0; j < vname_len; j++) lc[j] = toLOWER(lc[j]);
251 85 35 if (!is_str)
252 29 56 next_ival = is_flags ? next_ival << 1 : next_ival + 1;
265 8 0 if (!pending || av_len(pending) < 0) return;
4 4 if (!pending || av_len(pending) < 0) return;
273 21 4 for (j = 0; j <= av_len(pending); j++) {
275 21 0 if (n) {
289 0 8 if (items < 1) croak("Usage: PKG->import(...)");
295 0 8 if (!exp_import) {
299 0 8 if (!exp_import) croak("Cannot find Exporter::import");
305 0 8 PUSHMARK(SP);
306 13 8 for (j = 0; j < items; j++) {
307 0 13 XPUSHs(ST(j));
311 0 8 FREETMPS;
326 16 5 for (j = 0; j <= av_len(names); j++) {
328 16 0 if (n) av_push(pending, newSVsv(*n));
330 5 0 if (enum_name) av_push(pending, newSVsv(enum_name));
331 5 0 if (enum_name) {
336 16 5 for (j = 0; j <= av_len(names); j++) {
338 16 0 if (n) av_push(tag_list, newSVsv(*n));
344 4 1 if (!get_cv(SvPV_nolen(buf), 0)) {
354 9 28 if (is_type) {
361 27 9 while ((he = hv_iternext(d->val2name))) {
363 0 27 const char *key = HePV(he, klen);
368 27 9 while ((he = hv_iternext(d->name2val))) {
370 0 27 const char *key = HePV(he, klen);
375 30 101 for (k = 0; k < klen; k++) lc_key[k] = toLOWER(key[k]);
131 27 for (k = 0; k < klen; k++) lc_key[k] = toLOWER(key[k]);
380 3 6 if (is_flags) {
382 9 3 for (j = 0; j <= av_len(d->values); j++) {
384 9 0 if (svp) mask |= SvIV(*svp);
393 0 37 PUSHMARK(SP);
394 0 37 mXPUSHs(newSVpvs("Enum::Declare::Meta"));
395 0 37 mXPUSHs(newSVpvs("enum_name")); mXPUSHs(newSVsv(name_sv));
0 37 mXPUSHs(newSVpvs("enum_name")); mXPUSHs(newSVsv(name_sv));
396 0 37 mXPUSHs(newSVpvs("package")); mXPUSHs(newSVpvn(pkg, pkg_len));
0 37 mXPUSHs(newSVpvs("package")); mXPUSHs(newSVpvn(pkg, pkg_len));
397 0 37 mXPUSHs(newSVpvs("names")); mXPUSHs(newRV_noinc((SV*)d->names));
0 37 mXPUSHs(newSVpvs("names")); mXPUSHs(newRV_noinc((SV*)d->names));
398 0 37 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)d->values));
0 37 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)d->values));
399 0 37 mXPUSHs(newSVpvs("name2val")); mXPUSHs(newRV_noinc((SV*)d->name2val));
0 37 mXPUSHs(newSVpvs("name2val")); mXPUSHs(newRV_noinc((SV*)d->name2val));
400 0 37 mXPUSHs(newSVpvs("val2name")); mXPUSHs(newRV_noinc((SV*)d->val2name));
0 37 mXPUSHs(newSVpvs("val2name")); mXPUSHs(newRV_noinc((SV*)d->val2name));
406 37 0 FREETMPS;
415 9 28 if (is_type && etd) {
9 0 if (is_type && etd) {
438 1 13 if (sv_isobject(val))
441 0 13 PUSHMARK(SP);
442 0 13 XPUSHs(estd->set_instance);
443 0 13 XPUSHs(val);
450 13 0 FREETMPS; LEAVE;
467 0 0 for (i = 0; i < items; i++) {
472 0 0 PUSHMARK(SP);
473 0 0 mXPUSHs(newSVpvs("Enum::Declare::Set"));
474 0 0 mXPUSHs(newSVpvs("meta")); XPUSHs(meta_sv);
0 0 mXPUSHs(newSVpvs("meta")); XPUSHs(meta_sv);
475 0 0 mXPUSHs(newSVpvs("name")); mXPUSHs(newSVpvn(GvNAME(CvGV(cv)), GvNAMELEN(CvGV(cv))));
0 0 mXPUSHs(newSVpvs("name")); mXPUSHs(newSVpvn(GvNAME(CvGV(cv)), GvNAMELEN(CvGV(cv))));
476 0 0 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)vals_av));
0 0 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)vals_av));
482 0 0 FREETMPS; LEAVE;
492 0 10 if (!registry) return NULL;
496 0 10 if (!he) return NULL;
505 0 4 if (c != '{') croak("Expected '{' in enumSet declaration");
511 4 5 if (c == '}') { lex_read_unichar(0); break; }
512 0 5 if (c == -1) croak("Unexpected end of input in enumSet declaration");
514 0 5 if (!vname) croak("Expected variant name in enumSet declaration");
517 2 3 if (lex_peek_unichar(0) == ',') lex_read_unichar(0);
529 0 10 if (attr_sv == &PL_sv_undef)
535 3 7 if (last_comma) {
552 5 4 for (i = 0; i <= av_len(member_names); i++) {
554 5 0 if (name_p) {
558 0 5 PUSHMARK(SP);
559 0 5 XPUSHs(meta);
560 0 5 mXPUSHs(newSVpv(vname, 0));
566 0 5 if (!SvOK(val)) {
567 0 0 FREETMPS; LEAVE;
572 5 0 FREETMPS; LEAVE;
577 0 4 PUSHMARK(SP);
578 0 4 mXPUSHs(newSVpvs("Enum::Declare::Set"));
579 0 4 mXPUSHs(newSVpvs("meta")); XPUSHs(meta);
0 4 mXPUSHs(newSVpvs("meta")); XPUSHs(meta);
580 0 4 mXPUSHs(newSVpvs("name")); XPUSHs(set_name_sv);
0 4 mXPUSHs(newSVpvs("name")); XPUSHs(set_name_sv);
581 0 4 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)vals_av));
0 4 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)vals_av));
582 0 4 mXPUSHs(newSVpvs("frozen")); mXPUSHs(newSViv(1));
0 4 mXPUSHs(newSVpvs("frozen")); mXPUSHs(newSViv(1));
588 4 0 FREETMPS; LEAVE;
596 0 6 PUSHMARK(SP);
597 0 6 mXPUSHs(newSVpvs("Enum::Declare::Set"));
598 0 6 mXPUSHs(newSVpvs("meta")); XPUSHs(meta);
0 6 mXPUSHs(newSVpvs("meta")); XPUSHs(meta);
599 0 6 mXPUSHs(newSVpvs("name")); XPUSHs(set_name_sv);
0 6 mXPUSHs(newSVpvs("name")); XPUSHs(set_name_sv);
605 6 0 FREETMPS; LEAVE;
620 3 0 if (gv && GvCV(gv)) {
3 0 if (gv && GvCV(gv)) {
622 0 3 PUSHMARK(SP);
628 0 3 FREETMPS; LEAVE;
648 0 10 if (!set_name_sv) croak("Expected enumSet name");
652 10 0 pkg = HvNAME(PL_curstash);
10 0 pkg = HvNAME(PL_curstash);
0 10 pkg = HvNAME(PL_curstash);
0 0 pkg = HvNAME(PL_curstash);
10 0 pkg = HvNAME(PL_curstash);
0 10 pkg = HvNAME(PL_curstash);
657 0 10 if (!meta)
661 4 6 if (lex_peek_unichar(0) == '{') {
672 0 10 if (is_export) {
678 3 7 if (is_type)
680 3 7 if (attr_sv != &PL_sv_undef) SvREFCNT_dec(attr_sv);
699 0 37 if (!name_sv) croak("Expected enum name");
703 37 0 pkg = HvNAME(PL_curstash);
37 0 pkg = HvNAME(PL_curstash);
0 37 pkg = HvNAME(PL_curstash);
0 0 pkg = HvNAME(PL_curstash);
37 0 pkg = HvNAME(PL_curstash);
0 37 pkg = HvNAME(PL_curstash);
711 5 32 if (has_attr(aTHX_ attr_sv, "Export"))
715 25 12 if (attr_sv != &PL_sv_undef) SvREFCNT_dec(attr_sv);
728 37 0 const char *caller = CopSTASHPV(PL_curcop);
37 0 const char *caller = CopSTASHPV(PL_curcop);
37 0 const char *caller = CopSTASHPV(PL_curcop);
0 37 const char *caller = CopSTASHPV(PL_curcop);
0 0 const char *caller = CopSTASHPV(PL_curcop);
37 0 const char *caller = CopSTASHPV(PL_curcop);
0 37 const char *caller = CopSTASHPV(PL_curcop);