Branch Coverage

Declare.xs
Criterion Covered Total %
branch 216 360 60.0


line true false branch
15 62 106 if (!SvOK(attr_sv)) return 0;
19 133 69 while (p < end) {
21 36 97 STRLEN seg = comma ? (STRLEN)(comma - p) : (STRLEN)(end - p);
22 37 96 if (seg == nlen && memEQ(p, name, nlen)) return 1;
37 0 if (seg == nlen && memEQ(p, name, nlen)) return 1;
38 0 24 if (!SvOK(val)) return false;
39 6 18 if (etd->flags_mask >= 0) {
41 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)))
44 6 0 return iv >= 0 && (iv & ~etd->flags_mask) == 0;
4 2 return iv >= 0 && (iv & ~etd->flags_mask) == 0;
58 0 24 if (!SvOK(val)) return val;
60 10 14 if (hv_exists(etd->val2name, pv, len))
64 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]);
67 5 9 if (found) return sv_mortalcopy(*found);
76 0 1288 if (c == -1) break;
77 1288 0 if (!isALNUM(c) && c != '_') break;
219 1069 if (!isALNUM(c) && c != '_') break;
219 0 if (!isALNUM(c) && c != '_') break;
81 0 219 if (SvCUR(buf) == 0) {
91 47 47 while (c == ':') {
96 0 47 if (!a) croak("Expected attribute name after ':'");
97 35 12 if (attr_sv == &PL_sv_undef) {
118 0 64 if (c == -1) croak("Unterminated string in enum declaration");
119 0 64 if (c == '\\' && quote == '"') {
0 0 if (c == '\\' && quote == '"') {
121 0 0 if (next == -1) croak("Unterminated string in enum declaration");
123 11 53 } else if (c == quote) {
137 1 13 if (c == '-') {
143 0 14 if (!isDIGIT(c))
148 49 0 if (c == -1 || !isDIGIT(c)) break;
35 14 if (c == -1 || !isDIGIT(c)) break;
154 1 13 if (is_neg) ival = -ival;
163 0 37 if (c != '{') croak("Expected '{' after enum name");
169 37 120 if (c == '}') { lex_read_unichar(0); break; }
170 0 120 if (c == -1) croak("Unexpected end of input in enum declaration");
172 0 120 if (!vname) croak("Expected variant name in enum declaration");
176 25 95 if (c == '=') {
180 17 8 if (c == '"' || c == '\'') {
3 14 if (c == '"' || c == '\'') {
189 83 37 if (lex_peek_unichar(0) == ',') lex_read_unichar(0);
210 120 37 for (i = 0; i < pair_count; i += 2) {
213 120 0 SV *vname = name_p ? *name_p : &PL_sv_undef;
214 120 0 SV *vval = val_p ? *val_p : &PL_sv_undef;
219 25 95 if (SvOK(vval)) {
220 11 14 if (is_str) {
226 24 71 } else if (is_str) {
231 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]);
252 85 35 if (!is_str)
253 29 56 next_ival = is_flags ? next_ival << 1 : next_ival + 1;
266 8 0 if (!pending || av_len(pending) < 0) return;
4 4 if (!pending || av_len(pending) < 0) return;
274 21 4 for (j = 0; j <= av_len(pending); j++) {
276 21 0 if (n) {
290 0 8 if (items < 1) croak("Usage: PKG->import(...)");
296 0 8 if (!exp_import) {
300 0 8 if (!exp_import) croak("Cannot find Exporter::import");
306 0 8 PUSHMARK(SP);
307 13 8 for (j = 0; j < items; j++) {
308 0 13 XPUSHs(ST(j));
312 0 8 FREETMPS;
327 16 5 for (j = 0; j <= av_len(names); j++) {
329 16 0 if (n) av_push(pending, newSVsv(*n));
331 5 0 if (enum_name) av_push(pending, newSVsv(enum_name));
332 5 0 if (enum_name) {
337 16 5 for (j = 0; j <= av_len(names); j++) {
339 16 0 if (n) av_push(tag_list, newSVsv(*n));
345 4 1 if (!get_cv(SvPV_nolen(buf), 0)) {
355 9 28 if (is_type) {
362 27 9 while ((he = hv_iternext(d->val2name))) {
364 0 27 const char *key = HePV(he, klen);
369 27 9 while ((he = hv_iternext(d->name2val))) {
371 0 27 const char *key = HePV(he, klen);
376 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]);
381 3 6 if (is_flags) {
383 9 3 for (j = 0; j <= av_len(d->values); j++) {
385 9 0 if (svp) mask |= SvIV(*svp);
394 0 37 PUSHMARK(SP);
395 0 37 mXPUSHs(newSVpvs("Enum::Declare::Meta"));
396 0 37 mXPUSHs(newSVpvs("enum_name")); mXPUSHs(newSVsv(name_sv));
0 37 mXPUSHs(newSVpvs("enum_name")); mXPUSHs(newSVsv(name_sv));
397 0 37 mXPUSHs(newSVpvs("package")); mXPUSHs(newSVpvn(pkg, pkg_len));
0 37 mXPUSHs(newSVpvs("package")); mXPUSHs(newSVpvn(pkg, pkg_len));
398 0 37 mXPUSHs(newSVpvs("names")); mXPUSHs(newRV_noinc((SV*)d->names));
0 37 mXPUSHs(newSVpvs("names")); mXPUSHs(newRV_noinc((SV*)d->names));
399 0 37 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)d->values));
0 37 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)d->values));
400 0 37 mXPUSHs(newSVpvs("name2val")); mXPUSHs(newRV_noinc((SV*)d->name2val));
0 37 mXPUSHs(newSVpvs("name2val")); mXPUSHs(newRV_noinc((SV*)d->name2val));
401 0 37 mXPUSHs(newSVpvs("val2name")); mXPUSHs(newRV_noinc((SV*)d->val2name));
0 37 mXPUSHs(newSVpvs("val2name")); mXPUSHs(newRV_noinc((SV*)d->val2name));
407 37 0 FREETMPS;
416 9 28 if (is_type && etd) {
9 0 if (is_type && etd) {
439 1 13 if (sv_isobject(val))
442 0 13 PUSHMARK(SP);
443 0 13 XPUSHs(estd->set_instance);
444 0 13 XPUSHs(val);
451 13 0 FREETMPS; LEAVE;
468 0 0 for (i = 0; i < items; i++) {
473 0 0 PUSHMARK(SP);
474 0 0 mXPUSHs(newSVpvs("Enum::Declare::Set"));
475 0 0 mXPUSHs(newSVpvs("meta")); XPUSHs(meta_sv);
0 0 mXPUSHs(newSVpvs("meta")); XPUSHs(meta_sv);
476 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))));
477 0 0 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)vals_av));
0 0 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)vals_av));
483 0 0 FREETMPS; LEAVE;
493 0 10 if (!registry) return NULL;
497 0 10 if (!he) return NULL;
506 0 4 if (c != '{') croak("Expected '{' in enumSet declaration");
512 4 5 if (c == '}') { lex_read_unichar(0); break; }
513 0 5 if (c == -1) croak("Unexpected end of input in enumSet declaration");
515 0 5 if (!vname) croak("Expected variant name in enumSet declaration");
518 2 3 if (lex_peek_unichar(0) == ',') lex_read_unichar(0);
530 0 10 if (attr_sv == &PL_sv_undef)
536 3 7 if (last_comma) {
553 5 4 for (i = 0; i <= av_len(member_names); i++) {
555 5 0 if (name_p) {
559 0 5 PUSHMARK(SP);
560 0 5 XPUSHs(meta);
561 0 5 mXPUSHs(newSVpv(vname, 0));
567 0 5 if (!SvOK(val)) {
568 0 0 FREETMPS; LEAVE;
573 5 0 FREETMPS; LEAVE;
578 0 4 PUSHMARK(SP);
579 0 4 mXPUSHs(newSVpvs("Enum::Declare::Set"));
580 0 4 mXPUSHs(newSVpvs("meta")); XPUSHs(meta);
0 4 mXPUSHs(newSVpvs("meta")); XPUSHs(meta);
581 0 4 mXPUSHs(newSVpvs("name")); XPUSHs(set_name_sv);
0 4 mXPUSHs(newSVpvs("name")); XPUSHs(set_name_sv);
582 0 4 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)vals_av));
0 4 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)vals_av));
583 0 4 mXPUSHs(newSVpvs("frozen")); mXPUSHs(newSViv(1));
0 4 mXPUSHs(newSVpvs("frozen")); mXPUSHs(newSViv(1));
589 4 0 FREETMPS; LEAVE;
597 0 6 PUSHMARK(SP);
598 0 6 mXPUSHs(newSVpvs("Enum::Declare::Set"));
599 0 6 mXPUSHs(newSVpvs("meta")); XPUSHs(meta);
0 6 mXPUSHs(newSVpvs("meta")); XPUSHs(meta);
600 0 6 mXPUSHs(newSVpvs("name")); XPUSHs(set_name_sv);
0 6 mXPUSHs(newSVpvs("name")); XPUSHs(set_name_sv);
606 6 0 FREETMPS; LEAVE;
621 3 0 if (gv && GvCV(gv)) {
3 0 if (gv && GvCV(gv)) {
623 0 3 PUSHMARK(SP);
629 0 3 FREETMPS; LEAVE;
649 0 10 if (!set_name_sv) croak("Expected enumSet name");
653 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);
658 0 10 if (!meta)
662 4 6 if (lex_peek_unichar(0) == '{') {
673 0 10 if (is_export) {
679 3 7 if (is_type)
681 3 7 if (attr_sv != &PL_sv_undef) SvREFCNT_dec(attr_sv);
700 0 37 if (!name_sv) croak("Expected enum name");
704 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);
712 5 32 if (has_attr(aTHX_ attr_sv, "Export"))
716 25 12 if (attr_sv != &PL_sv_undef) SvREFCNT_dec(attr_sv);
729 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);