Branch Coverage

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


line true false branch
65 0 0 sv_catpvf(message, "%s at %s line %" IVdf,
68 0 0 if(context)
69 0 0 sv_catpvf(message, ", near \"%" UTF8f "\"",
0 0 sv_catpvf(message, ", near \"%" UTF8f "\"",
70 0 0 UTF8fARG(UTF, contlen, context));
0 0 UTF8fARG(UTF, contlen, context));
0 0 UTF8fARG(UTF, contlen, context));
97 1 0 if (first)
99 1 0 while (kid && OpHAS_SIBLING(kid))
0 1 while (kid && OpHAS_SIBLING(kid))
100 0 0 kid = OpSIBLING(kid);
101 1 0 if (kid)
115 2 0 if (!cv)
119 2 0 if (!gv)
139 14 3 if(value) {
140 0 14 EXTEND(SP, 1);
145 1 2 if(cLOGOP->op_other)
156 7 1 if(!hv_iterinit(slurpy_hv))
166 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)));
170 0 1 while((he = hv_iternext(slurpy_hv)))
171 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++;
173 1 0 croak_from_caller("Unrecognised %s %" SVf " for subroutine %" SVf,
203 4 0 for(reg = sigattrs; reg; reg = reg->next) {
204 0 4 if(!strEQ(name, reg->name))
207 4 0 if(reg->funcs->permit_hintkey &&
4 0 if(reg->funcs->permit_hintkey &&
208 0 4 (!hints || !hv_fetch(hints, reg->funcs->permit_hintkey, reg->permit_hintkeylen, 0)))
229 0 0 if(p->funcs->free)
244 9 13 if(ctx->named_varops)
261 19 14 if((flags & PARSE_SUBSIGNATURE_NAMED_PARAMS) && c == ':') {
13 6 if((flags & PARSE_SUBSIGNATURE_NAMED_PARAMS) && c == ':') {
284 33 0 if(isIDFIRST_uni(lex_peek_unichar(0))) {
33 0 if(isIDFIRST_uni(lex_peek_unichar(0))) {
1 32 if(isIDFIRST_uni(lex_peek_unichar(0))) {
32 1 if(isIDFIRST_uni(lex_peek_unichar(0))) {
286 48 0 while(isALNUM_uni(lex_peek_unichar(0)))
48 0 while(isALNUM_uni(lex_peek_unichar(0)))
32 16 while(isALNUM_uni(lex_peek_unichar(0)))
16 32 while(isALNUM_uni(lex_peek_unichar(0)))
292 13 19 if(paramctx.is_named) {
293 9 4 if(!ctx->named_varops)
314 10 23 if(permit_attributes && lex_peek_unichar(0) == ':') {
4 6 if(permit_attributes && lex_peek_unichar(0) == ':') {
320 4 4 while(lex_scan_attrval_into(attrname, attrval)) {
323 4 0 SignatureAttributeRegistration *reg = find_registered_attribute(SvPV_nolen(attrname));
326 4 0 if(reg->funcs->apply)
329 4 0 if(attrdata || reg->funcs->post_defop) {
0 4 if(attrdata || reg->funcs->post_defop) {
330 0 0 if(!pending) {
343 0 4 if(lex_peek_unichar(0) == ':') {
350 29 4 if(c == '$') {
353 13 16 if(paramctx.is_named) {
358 0 16 if(parser->sig_slurpy)
364 3 26 if(lex_peek_unichar(0) == '=') {
368 1 2 if(!paramctx.is_named)
373 2 1 if(paramctx.is_named) {
374 0 2 paramctx.defop = (OP *)alloc_LOGOP_ANY(OP_CUSTOM, defexpr, LINKLIST(defexpr));
378 0 1 paramctx.defop = (OP *)alloc_LOGOP(OP_ARGDEFELEM, defexpr, LINKLIST(defexpr));
386 3 0 LINKLIST(paramctx.varop);
392 0 26 if(parser->sig_optelems)
396 13 16 if(paramctx.is_named) {
398 11 2 if(!defop) {
405 11 0 LINKLIST(paramctx.varop);
420 0 4 if(paramctx.is_named)
422 0 4 if(parser->sig_slurpy && parser->sig_slurpy != '+')
427 0 4 if(lex_peek_unichar(0) == '=')
433 0 33 if(pending) {
434 0 0 for(int i = 0; i <= AvFILL(pending); i++) {
0 0 for(int i = 0; i <= AvFILL(pending); i++) {
437 0 0 if(p->funcs->post_defop)
442 32 1 return paramctx.op ? newSTATEOP(0, NULL, paramctx.op) : NULL;
469 33 3 while(lex_peek_unichar(0) != ')') {
474 32 1 if(elem) {
480 32 0 final_elem = OpSIBLING(cLISTOPx(elem)->op_first);
482 32 0 if(OP_IS_NAMED_PARAM(ctx.last_varop))
14 18 if(OP_IS_NAMED_PARAM(ctx.last_varop))
13 1 if(OP_IS_NAMED_PARAM(ctx.last_varop))
13 0 if(OP_IS_NAMED_PARAM(ctx.last_varop))
488 0 33 if(PL_parser->error_count) {
509 22 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
22 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
0 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
22 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
22 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
0 22 if (!FEATURE_SIGNATURES_IS_ENABLED)
518 9 13 if(ctx.named_varops) {
552 9 13 if(ctx.named_varops) {
559 0 22 for(int i = 0; i <= AvFILL(ctx.named_varops); i++) {
13 9 for(int i = 0; i <= AvFILL(ctx.named_varops); i++) {
575 7 2 if(!allow_extras_after_named) {
603 6 0 if(funcs->permit_hintkey)