| 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); |