line |
true |
false |
branch |
94
|
49 |
47 |
FOREACH_HOOKS_FORWARD { |
|
49 |
47 |
FOREACH_HOOKS_FORWARD { |
97
|
48 |
1 |
if(!(hooks->flags & XS_PARSE_SUBLIKE_FLAG_BODY_OPTIONAL)) |
99
|
3 |
46 |
if(hooks->flags & XS_PARSE_SUBLIKE_COMPAT_FLAG_DYNAMIC_ACTIONS) |
103
|
46 |
1 |
if(!(skip_parts & XS_PARSE_SUBLIKE_PART_NAME)) { |
107
|
4 |
43 |
if((require_parts & XS_PARSE_SUBLIKE_PART_NAME) && !ctx.name) |
|
1 |
3 |
if((require_parts & XS_PARSE_SUBLIKE_PART_NAME) && !ctx.name) |
111
|
9 |
37 |
ctx.actions = ctx.name |
115
|
48 |
46 |
FOREACH_HOOKS_FORWARD { |
|
48 |
46 |
FOREACH_HOOKS_FORWARD { |
116
|
13 |
35 |
if(hooks->pre_subparse) |
126
|
43 |
3 |
if(!have_dynamic_actions) { |
127
|
34 |
9 |
if(ctx.name) |
134
|
9 |
37 |
if(ctx.actions & XS_PARSE_SUBLIKE_ACTION_CVf_ANON) |
144
|
45 |
1 |
if(!(skip_parts & XS_PARSE_SUBLIKE_PART_ATTRS) && (lex_peek_unichar(0) == ':')) { |
|
4 |
41 |
if(!(skip_parts & XS_PARSE_SUBLIKE_PART_ATTRS) && (lex_peek_unichar(0) == ':')) { |
153
|
4 |
4 |
if(!lex_scan_attrval_into(attr, val)) |
156
|
0 |
4 |
if(lex_peek_unichar(0) == ':') { |
163
|
4 |
4 |
FOREACH_HOOKS_FORWARD { |
|
4 |
4 |
FOREACH_HOOKS_FORWARD { |
164
|
1 |
3 |
if((hooks->flags & XS_PARSE_SUBLIKE_FLAG_FILTERATTRS) && (hooks->filter_attr)) |
|
1 |
0 |
if((hooks->flags & XS_PARSE_SUBLIKE_FLAG_FILTERATTRS) && (hooks->filter_attr)) |
168
|
1 |
3 |
if(handled) { |
174
|
0 |
3 |
if(strEQ(SvPVX(attr), "lvalue")) { |
179
|
1 |
2 |
if(SvPOK(val)) |
190
|
48 |
46 |
FOREACH_HOOKS_FORWARD { |
|
48 |
46 |
FOREACH_HOOKS_FORWARD { |
191
|
10 |
38 |
if(hooks->post_blockstart) |
203
|
45 |
1 |
if(!(skip_parts & XS_PARSE_SUBLIKE_PART_SIGNATURE) && (lex_peek_unichar(0) == '(')) { |
|
19 |
26 |
if(!(skip_parts & XS_PARSE_SUBLIKE_PART_SIGNATURE) && (lex_peek_unichar(0) == '(')) { |
207
|
19 |
0 |
if(require_parts & XS_PARSE_SUBLIKE_PART_SIGNATURE) { |
251
|
19 |
19 |
FOREACH_HOOKS_FORWARD { |
|
19 |
19 |
FOREACH_HOOKS_FORWARD { |
252
|
7 |
12 |
if(hooks->flags & XS_PARSE_SUBLIKE_FLAG_SIGNATURE_NAMED_PARAMS) |
254
|
4 |
15 |
if(hooks->flags & XS_PARSE_SUBLIKE_FLAG_SIGNATURE_PARAM_ATTRIBUTES) |
258
|
8 |
11 |
if(flags) |
263
|
0 |
19 |
if(PL_parser->error_count) { |
270
|
0 |
19 |
if(lex_peek_unichar(0) != ')') |
277
|
42 |
4 |
if(lex_peek_unichar(0) == '{') { |
282
|
3 |
1 |
else if(require_parts & XS_PARSE_SUBLIKE_PART_BODY) |
284
|
0 |
1 |
else if(lex_peek_unichar(0) == ';') { |
291
|
42 |
1 |
if(ctx.body && sigop) { |
|
19 |
23 |
if(ctx.body && sigop) { |
295
|
5 |
14 |
if (ctx.body->op_type == OP_STUB) { |
303
|
0 |
43 |
if(PL_parser->error_count) { |
317
|
0 |
0 |
while(PL_scopestack_ix > was_scopestack_ix) |
321
|
0 |
0 |
if(ctx.name) { |
334
|
45 |
43 |
FOREACH_HOOKS_REVERSE { |
|
45 |
43 |
FOREACH_HOOKS_REVERSE { |
335
|
12 |
33 |
if(hooks->pre_blockend) |
345
|
42 |
1 |
if(ctx.body) { |
348
|
39 |
3 |
if(!have_dynamic_actions) { |
349
|
31 |
8 |
if(ctx.name) |
361
|
34 |
8 |
if(ctx.name && action_set_cvname && action_install_symbol) |
|
33 |
1 |
if(ctx.name && action_set_cvname && action_install_symbol) |
364
|
0 |
42 |
if(!nameop && action_install_symbol) |
369
|
1 |
41 |
if(!nameop && action_set_cvname) { |
372
|
1 |
0 |
const char *name = SvPV_const(ctx.name, namelen); |
383
|
1 |
0 |
CvNAME_HEK_set(ctx.cv, |
392
|
45 |
43 |
FOREACH_HOOKS_FORWARD { |
|
45 |
43 |
FOREACH_HOOKS_FORWARD { |
393
|
11 |
34 |
if(hooks->post_newcv) |
400
|
40 |
3 |
if(!have_dynamic_actions) { |
401
|
8 |
32 |
if(!ctx.name) |
407
|
33 |
10 |
if(!(ctx.actions & XS_PARSE_SUBLIKE_ACTION_REFGEN_ANONCODE)) { |
417
|
40 |
3 |
if(!have_dynamic_actions) { |
418
|
8 |
32 |
if(!ctx.name) |
424
|
33 |
10 |
return (ctx.actions & XS_PARSE_SUBLIKE_ACTION_RET_EXPR) ? KEYWORD_PLUGIN_EXPR : KEYWORD_PLUGIN_STMT; |
468
|
26 |
9 |
if(reg->hooks->permit_hintkey) |
473
|
26 |
9 |
if(!reg->hooks->permit && !reg->hooks->permit_hintkey) |
|
0 |
26 |
if(!reg->hooks->permit && !reg->hooks->permit_hintkey) |
500
|
45145 |
26739 |
for(reg = registrations; reg; reg = reg->next) { |
501
|
3759 |
41386 |
if(reg->kwlen != kwlen || !strEQ(reg->kw, kw)) |
|
3709 |
50 |
if(reg->kwlen != kwlen || !strEQ(reg->kw, kw)) |
504
|
33 |
17 |
if(reg->hooks->permit_hintkey && |
|
33 |
0 |
if(reg->hooks->permit_hintkey && |
505
|
1 |
32 |
(!hints || !hv_fetch(hints, reg->hooks->permit_hintkey, reg->permit_hintkey_len, 0))) |
521
|
1 |
0 |
if(!kwsv || !SvCUR(kwsv)) |
|
0 |
1 |
if(!kwsv || !SvCUR(kwsv)) |
524
|
1 |
0 |
const char *kw = SvPV_nolen(kwsv); |
531
|
0 |
1 |
if(kwlen != 3 || !strEQ(kw, "sub")) { |
|
0 |
0 |
if(kwlen != 3 || !strEQ(kw, "sub")) { |
|
0 |
0 |
if(kwlen != 3 || !strEQ(kw, "sub")) { |
|
0 |
0 |
if(kwlen != 3 || !strEQ(kw, "sub")) { |
|
0 |
0 |
if(kwlen != 3 || !strEQ(kw, "sub")) { |
533
|
0 |
1 |
if(!reg) |
546
|
1 |
0 |
if(reg) { |
551
|
0 |
1 |
return parse(aTHX_ hd, 1 + !!reg, op_ptr); |
561
|
0 |
6 |
if(funcs->ver < 5) |
564
|
0 |
6 |
if(funcs->ver > XSPARSESUBLIKE_ABI_VERSION) |
568
|
6 |
0 |
if(!name || !(name[0] >= 'A' && name[0] <= 'Z')) |
|
0 |
6 |
if(!name || !(name[0] >= 'A' && name[0] <= 'Z')) |
571
|
0 |
6 |
if(!funcs->permit_hintkey) |
601
|
26739 |
46 |
if(!reg) |
618
|
6 |
41 |
while(hooks->flags & XS_PARSE_SUBLIKE_FLAG_PREFIX) { |
623
|
6 |
0 |
if(!kwsv || !SvCUR(kwsv)) |
|
0 |
6 |
if(!kwsv || !SvCUR(kwsv)) |
626
|
6 |
0 |
kw = SvPV_nolen(kwsv); |
632
|
5 |
1 |
if(kwlen == 3 && strEQ(kw, "sub")) |
|
5 |
0 |
if(kwlen == 3 && strEQ(kw, "sub")) |
|
5 |
0 |
if(kwlen == 3 && strEQ(kw, "sub")) |
|
5 |
0 |
if(kwlen == 3 && strEQ(kw, "sub")) |
|
0 |
5 |
if(kwlen == 3 && strEQ(kw, "sub")) |
636
|
0 |
1 |
if(!reg) |
642
|
0 |
1 |
if(SvLEN(hdlsv) < (nhooks + 1) * sizeof(struct HooksAndData)) { |
643
|
0 |
0 |
SvGROW(hdlsv, SvLEN(hdlsv) * 2); |
|
0 |
0 |
SvGROW(hdlsv, SvLEN(hdlsv) * 2); |