Branch Coverage

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


line true false branch
64 0 0 sv_catpvf(message, "%s at %s line %" IVdf,
67 0 0 if(context)
68 0 0 sv_catpvf(message, ", near \"%" UTF8f "\"",
0 0 sv_catpvf(message, ", near \"%" UTF8f "\"",
69 0 0 UTF8fARG(UTF, contlen, context));
0 0 UTF8fARG(UTF, contlen, context));
0 0 UTF8fARG(UTF, contlen, context));
96 1 0 if (first)
98 1 0 while (kid && OpHAS_SIBLING(kid))
0 1 while (kid && OpHAS_SIBLING(kid))
99 0 0 kid = OpSIBLING(kid);
100 1 0 if (kid)
114 2 0 if (!cv)
118 2 0 if (!gv)
138 11 2 if(value) {
139 0 11 EXTEND(SP, 1);
144 1 1 if(cLOGOP->op_other)
155 4 1 if(!hv_iterinit(slurpy_hv))
165 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)));
169 0 1 while((he = hv_iternext(slurpy_hv)))
170 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++;
172 1 0 croak("Unrecognised %s %" SVf " for subroutine %" SVf,
202 4 0 for(reg = sigattrs; reg; reg = reg->next) {
203 0 4 if(!strEQ(name, reg->name))
206 4 0 if(reg->funcs->permit_hintkey &&
4 0 if(reg->funcs->permit_hintkey &&
207 0 4 (!hints || !hv_fetch(hints, reg->funcs->permit_hintkey, reg->permit_hintkeylen, 0)))
228 0 0 if(p->funcs->free)
243 6 13 if(ctx->named_varops)
260 13 14 if((flags & PARSE_SUBSIGNATURE_NAMED_PARAMS) && c == ':') {
9 4 if((flags & PARSE_SUBSIGNATURE_NAMED_PARAMS) && c == ':') {
283 27 0 if(isIDFIRST_uni(lex_peek_unichar(0))) {
27 0 if(isIDFIRST_uni(lex_peek_unichar(0))) {
1 26 if(isIDFIRST_uni(lex_peek_unichar(0))) {
26 1 if(isIDFIRST_uni(lex_peek_unichar(0))) {
285 42 0 while(isALNUM_uni(lex_peek_unichar(0)))
42 0 while(isALNUM_uni(lex_peek_unichar(0)))
26 16 while(isALNUM_uni(lex_peek_unichar(0)))
16 26 while(isALNUM_uni(lex_peek_unichar(0)))
291 9 17 if(paramctx.is_named) {
292 6 3 if(!ctx->named_varops)
307 8 19 if(permit_attributes && lex_peek_unichar(0) == ':') {
4 4 if(permit_attributes && lex_peek_unichar(0) == ':') {
313 4 4 while(lex_scan_attrval_into(attrname, attrval)) {
316 4 0 SignatureAttributeRegistration *reg = find_registered_attribute(SvPV_nolen(attrname));
319 4 0 if(reg->funcs->apply)
322 4 0 if(attrdata || reg->funcs->post_defop) {
0 4 if(attrdata || reg->funcs->post_defop) {
323 0 0 if(!pending) {
336 0 4 if(lex_peek_unichar(0) == ':') {
343 23 4 if(c == '$') {
346 9 14 if(paramctx.is_named) {
351 0 14 if(parser->sig_slurpy)
357 2 21 if(lex_peek_unichar(0) == '=') {
361 1 1 if(!paramctx.is_named)
366 1 1 if(paramctx.is_named) {
367 0 1 paramctx.defop = (OP *)alloc_LOGOP_ANY(OP_CUSTOM, defexpr, LINKLIST(defexpr));
371 0 1 paramctx.defop = (OP *)alloc_LOGOP(OP_ARGDEFELEM, defexpr, LINKLIST(defexpr));
379 2 0 LINKLIST(paramctx.varop);
385 0 21 if(parser->sig_optelems)
389 9 14 if(paramctx.is_named) {
391 8 1 if(!defop) {
398 8 0 LINKLIST(paramctx.varop);
413 0 4 if(paramctx.is_named)
415 0 4 if(parser->sig_slurpy && parser->sig_slurpy != '+')
420 0 4 if(lex_peek_unichar(0) == '=')
426 0 27 if(pending) {
427 0 0 for(int i = 0; i <= AvFILL(pending); i++) {
0 0 for(int i = 0; i <= AvFILL(pending); i++) {
430 0 0 if(p->funcs->post_defop)
435 26 1 return paramctx.op ? newSTATEOP(0, NULL, paramctx.op) : NULL;
464 27 3 while(lex_peek_unichar(0) != ')') {
469 26 1 if(elem) {
475 26 0 final_elem = OpSIBLING(cLISTOPx(elem)->op_first);
477 26 0 if(OP_IS_NAMED_PARAM(ctx.last_varop))
10 16 if(OP_IS_NAMED_PARAM(ctx.last_varop))
9 1 if(OP_IS_NAMED_PARAM(ctx.last_varop))
9 0 if(OP_IS_NAMED_PARAM(ctx.last_varop))
483 0 27 if(PL_parser->error_count) {
504 19 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
19 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
0 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
19 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
19 0 if (!FEATURE_SIGNATURES_IS_ENABLED)
0 19 if (!FEATURE_SIGNATURES_IS_ENABLED)
513 6 13 if(ctx.named_varops) {
547 6 13 if(ctx.named_varops) {
554 0 15 for(int i = 0; i <= AvFILL(ctx.named_varops); i++) {
9 6 for(int i = 0; i <= AvFILL(ctx.named_varops); i++) {
570 4 2 if(!allow_extras_after_named) {
598 6 0 if(funcs->permit_hintkey)