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