Branch Coverage

src/parse_subsignature_ex.c
Criterion Covered Total %
branch 109 190 57.3


line true false branch
66 0 0 sv_catpvf(message, "%s at %s line %" IVdf,
69 0 0 if(context)
70 0 0 sv_catpvf(message, ", near \"%" UTF8f "\"",
0 0 sv_catpvf(message, ", near \"%" UTF8f "\"",
71 0 0 UTF8fARG(UTF, contlen, context));
0 0 UTF8fARG(UTF, contlen, context));
0 0 UTF8fARG(UTF, contlen, context));
98 1 0 if (first)
100 1 0 while (kid && OpHAS_SIBLING(kid))
0 1 while (kid && OpHAS_SIBLING(kid))
101 0 0 kid = OpSIBLING(kid);
102 1 0 if (kid)
116 2 0 if (!cv)
120 2 0 if (!gv)
140 12 3 if(value) {
141 0 12 EXTEND(SP, 1);
146 1 2 if(cLOGOP->op_other)
157 6 1 if(!hv_iterinit(slurpy_hv))
167 1 0 sv_catpvf(keynames, "'%" SVf "'", SVfARG(HeSVKEY_force(he)));
0 1 sv_catpvf(keynames, "'%" SVf "'", SVfARG(HeSVKEY_force(he)));
1 0 sv_catpvf(keynames, "'%" SVf "'", SVfARG(HeSVKEY_force(he)));
171 0 1 while((he = hv_iternext(slurpy_hv)))
172 0 0 sv_catpvf(keynames, ", '%" SVf "'", SVfARG(HeSVKEY_force(he))), nkeys++;
0 0 sv_catpvf(keynames, ", '%" SVf "'", SVfARG(HeSVKEY_force(he))), nkeys++;
0 0 sv_catpvf(keynames, ", '%" SVf "'", SVfARG(HeSVKEY_force(he))), nkeys++;
174 1 0 croak("Unrecognised %s %" SVf " for subroutine %" SVf,
204 4 0 for(reg = sigattrs; reg; reg = reg->next) {
205 0 4 if(!strEQ(name, reg->name))
208 4 0 if(reg->funcs->permit_hintkey &&
4 0 if(reg->funcs->permit_hintkey &&
209 0 4 (!hints || !hv_fetch(hints, reg->funcs->permit_hintkey, reg->permit_hintkeylen, 0)))
230 0 0 if(p->funcs->free)
245 8 13 if(ctx->named_varops)
262 17 14 if((flags & PARSE_SUBSIGNATURE_NAMED_PARAMS) && c == ':') {
11 6 if((flags & PARSE_SUBSIGNATURE_NAMED_PARAMS) && c == ':') {
285 31 0 if(isIDFIRST_uni(lex_peek_unichar(0))) {
31 0 if(isIDFIRST_uni(lex_peek_unichar(0))) {
1 30 if(isIDFIRST_uni(lex_peek_unichar(0))) {
30 1 if(isIDFIRST_uni(lex_peek_unichar(0))) {
287 46 0 while(isALNUM_uni(lex_peek_unichar(0)))
46 0 while(isALNUM_uni(lex_peek_unichar(0)))
30 16 while(isALNUM_uni(lex_peek_unichar(0)))
16 30 while(isALNUM_uni(lex_peek_unichar(0)))
293 11 19 if(paramctx.is_named) {
294 8 3 if(!ctx->named_varops)
315 8 23 if(permit_attributes && lex_peek_unichar(0) == ':') {
4 4 if(permit_attributes && lex_peek_unichar(0) == ':') {
321 4 4 while(lex_scan_attrval_into(attrname, attrval)) {
324 4 0 SignatureAttributeRegistration *reg = find_registered_attribute(SvPV_nolen(attrname));
327 4 0 if(reg->funcs->apply)
330 4 0 if(attrdata || reg->funcs->post_defop) {
0 4 if(attrdata || reg->funcs->post_defop) {
331 0 0 if(!pending) {
344 0 4 if(lex_peek_unichar(0) == ':') {
351 27 4 if(c == '$') {
354 11 16 if(paramctx.is_named) {
359 0 16 if(parser->sig_slurpy)
365 3 24 if(lex_peek_unichar(0) == '=') {
369 1 2 if(!paramctx.is_named)
374 2 1 if(paramctx.is_named) {
375 0 2 paramctx.defop = (OP *)alloc_LOGOP_ANY(OP_CUSTOM, defexpr, LINKLIST(defexpr));
379 0 1 paramctx.defop = (OP *)alloc_LOGOP(OP_ARGDEFELEM, defexpr, LINKLIST(defexpr));
387 3 0 LINKLIST(paramctx.varop);
393 0 24 if(parser->sig_optelems)
397 11 16 if(paramctx.is_named) {
399 9 2 if(!defop) {
406 9 0 LINKLIST(paramctx.varop);
421 0 4 if(paramctx.is_named)
423 0 4 if(parser->sig_slurpy && parser->sig_slurpy != '+')
428 0 4 if(lex_peek_unichar(0) == '=')
434 0 31 if(pending) {
435 0 0 for(int i = 0; i <= AvFILL(pending); i++) {
0 0 for(int i = 0; i <= AvFILL(pending); i++) {
438 0 0 if(p->funcs->post_defop)
443 30 1 return paramctx.op ? newSTATEOP(0, NULL, paramctx.op) : NULL;
472 31 3 while(lex_peek_unichar(0) != ')') {
477 30 1 if(elem) {
483 30 0 final_elem = OpSIBLING(cLISTOPx(elem)->op_first);
485 30 0 if(OP_IS_NAMED_PARAM(ctx.last_varop))
12 18 if(OP_IS_NAMED_PARAM(ctx.last_varop))
11 1 if(OP_IS_NAMED_PARAM(ctx.last_varop))
11 0 if(OP_IS_NAMED_PARAM(ctx.last_varop))
491 0 31 if(PL_parser->error_count) {
512 21 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
21 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
0 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
21 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
21 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
0 21 if (!FEATURE_SIGNATURES_IS_ENABLED)
521 8 13 if(ctx.named_varops) {
555 8 13 if(ctx.named_varops) {
562 0 19 for(int i = 0; i <= AvFILL(ctx.named_varops); i++) {
11 8 for(int i = 0; i <= AvFILL(ctx.named_varops); i++) {
578 6 2 if(!allow_extras_after_named) {
606 6 0 if(funcs->permit_hintkey)