Branch Coverage

lib/Enum/Declare.xs
Criterion Covered Total %
branch 118 180 65.5


line true false branch
13 27 42 if (!SvOK(attr_sv)) return 0;
17 50 24 while (p < end) {
19 12 38 STRLEN seg = comma ? (STRLEN)(comma - p) : (STRLEN)(end - p);
20 18 32 if (seg == nlen && memEQ(p, name, nlen)) return 1;
18 0 if (seg == nlen && memEQ(p, name, nlen)) return 1;
31 0 647 if (c == -1) break;
32 647 0 if (!isALNUM(c) && c != '_') break;
118 529 if (!isALNUM(c) && c != '_') break;
118 0 if (!isALNUM(c) && c != '_') break;
36 0 118 if (SvCUR(buf) == 0) {
46 18 23 while (c == ':') {
50 0 18 if (!a) croak("Expected attribute name after ':'");
51 14 4 if (attr_sv == &PL_sv_undef) {
72 0 45 if (c == -1) croak("Unterminated string in enum declaration");
73 0 45 if (c == '\\' && quote == '"') {
0 0 if (c == '\\' && quote == '"') {
75 0 0 if (next == -1) croak("Unterminated string in enum declaration");
77 9 36 } else if (c == quote) {
91 1 7 if (c == '-') {
97 0 8 if (!isDIGIT(c))
102 25 0 if (c == -1 || !isDIGIT(c)) break;
17 8 if (c == -1 || !isDIGIT(c)) break;
108 1 7 if (is_neg) ival = -ival;
117 0 23 if (c != '{') croak("Expected '{' after enum name");
123 23 77 if (c == '}') { lex_read_unichar(0); break; }
124 0 77 if (c == -1) croak("Unexpected end of input in enum declaration");
126 0 77 if (!vname) croak("Expected variant name in enum declaration");
131 17 60 if (c == '=') {
135 11 6 if (c == '"' || c == '\'') {
3 8 if (c == '"' || c == '\'') {
144 54 23 if (lex_peek_unichar(0) == ',') lex_read_unichar(0);
165 77 23 for (i = 0; i < pair_count; i += 2) {
168 77 0 SV *vname = name_p ? *name_p : &PL_sv_undef;
169 77 0 SV *vval = val_p ? *val_p : &PL_sv_undef;
174 17 60 if (SvOK(vval)) {
175 9 8 if (is_str) {
181 16 44 } else if (is_str) {
186 16 65 for (j = 0; j < vname_len; j++) lc[j] = toLOWER(lc[j]);
81 16 for (j = 0; j < vname_len; j++) lc[j] = toLOWER(lc[j]);
207 52 25 if (!is_str)
208 17 35 next_ival = is_flags ? next_ival << 1 : next_ival + 1;
221 8 0 if (!pending || av_len(pending) < 0) return;
4 4 if (!pending || av_len(pending) < 0) return;
229 21 4 for (j = 0; j <= av_len(pending); j++) {
231 21 0 if (n) {
245 0 8 if (items < 1) croak("Usage: PKG->import(...)");
251 0 8 if (!exp_import) {
255 0 8 if (!exp_import) croak("Cannot find Exporter::import");
261 0 8 PUSHMARK(SP);
262 13 8 for (j = 0; j < items; j++) {
263 0 13 XPUSHs(ST(j));
267 0 8 FREETMPS;
285 16 5 for (j = 0; j <= av_len(names); j++) {
287 16 0 if (n) av_push(pending, newSVsv(*n));
289 5 0 if (enum_name) av_push(pending, newSVsv(enum_name));
292 5 0 if (enum_name) {
297 16 5 for (j = 0; j <= av_len(names); j++) {
299 16 0 if (n) av_push(tag_list, newSVsv(*n));
307 4 1 if (!get_cv(SvPV_nolen(buf), 0)) {
318 0 23 PUSHMARK(SP);
319 0 23 mXPUSHs(newSVpvs("Enum::Declare::Meta"));
320 0 23 mXPUSHs(newSVpvs("enum_name")); mXPUSHs(newSVsv(name_sv));
0 23 mXPUSHs(newSVpvs("enum_name")); mXPUSHs(newSVsv(name_sv));
321 0 23 mXPUSHs(newSVpvs("package")); mXPUSHs(newSVpvn(pkg, pkg_len));
0 23 mXPUSHs(newSVpvs("package")); mXPUSHs(newSVpvn(pkg, pkg_len));
322 0 23 mXPUSHs(newSVpvs("names")); mXPUSHs(newRV_noinc((SV*)d->names));
0 23 mXPUSHs(newSVpvs("names")); mXPUSHs(newRV_noinc((SV*)d->names));
323 0 23 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)d->values));
0 23 mXPUSHs(newSVpvs("values")); mXPUSHs(newRV_noinc((SV*)d->values));
324 0 23 mXPUSHs(newSVpvs("name2val")); mXPUSHs(newRV_noinc((SV*)d->name2val));
0 23 mXPUSHs(newSVpvs("name2val")); mXPUSHs(newRV_noinc((SV*)d->name2val));
325 0 23 mXPUSHs(newSVpvs("val2name")); mXPUSHs(newRV_noinc((SV*)d->val2name));
0 23 mXPUSHs(newSVpvs("val2name")); mXPUSHs(newRV_noinc((SV*)d->val2name));
331 23 0 FREETMPS;
359 0 23 if (!name_sv) croak("Expected enum name");
363 23 0 pkg = HvNAME(PL_curstash);
23 0 pkg = HvNAME(PL_curstash);
0 23 pkg = HvNAME(PL_curstash);
0 0 pkg = HvNAME(PL_curstash);
23 0 pkg = HvNAME(PL_curstash);
0 23 pkg = HvNAME(PL_curstash);
370 5 18 if (has_attr(aTHX_ attr_sv, "Export"))
373 14 9 if (attr_sv != &PL_sv_undef) SvREFCNT_dec(attr_sv);
386 25 0 const char *caller = CopSTASHPV(PL_curcop);
25 0 const char *caller = CopSTASHPV(PL_curcop);
25 0 const char *caller = CopSTASHPV(PL_curcop);
0 25 const char *caller = CopSTASHPV(PL_curcop);
0 0 const char *caller = CopSTASHPV(PL_curcop);
25 0 const char *caller = CopSTASHPV(PL_curcop);
0 25 const char *caller = CopSTASHPV(PL_curcop);