Branch Coverage

include/destructure.h
Criterion Covered Total %
branch 139 190 73.1


line true false branch
53 0 412 if (c == -1) break;
54 412 0 if (!isALNUM(c) && c != '_') break;
133 279 if (!isALNUM(c) && c != '_') break;
133 0 if (!isALNUM(c) && c != '_') break;
58 1 132 if (SvCUR(buf) == 0) { SvREFCNT_dec(buf); return NULL; }
69 0 11 if (c == -1) croak("let: unterminated string in pattern key");
70 0 11 if (c == '\\') {
72 0 0 if (next == -1) croak("let: unterminated string in pattern key");
73 0 0 if (quote == '"') {
82 0 0 if (next != '\\' && next != '\'')
0 0 if (next != '\\' && next != '\'')
86 1 10 } else if (c == quote) {
100 16 92 if (c != '$' && c != '@' && c != '%')
6 10 if (c != '$' && c != '@' && c != '%')
0 6 if (c != '$' && c != '@' && c != '%')
105 0 108 if (!id) croak("let: expected an identifier after '%c'", (int)*sigil);
146 0 0 if (!SvROK(rv) || SvTYPE(SvRV(rv)) != SVt_PVAV) {
0 0 if (!SvROK(rv) || SvTYPE(SvRV(rv)) != SVt_PVAV) {
151 0 0 if (n < 0) n = 0;
152 0 0 EXTEND(SP, top - n + 1);
0 0 EXTEND(SP, top - n + 1);
153 0 0 for (i = n; i <= top; i++) {
155 0 0 PUSHs(el ? *el : &PL_sv_undef);
183 5 0 SV *rv = nitems > 0 ? items[0] : &PL_sv_undef;
189 4 1 if (!SvROK(rv) || SvTYPE(SvRV(rv)) != SVt_PVHV) {
0 4 if (!SvROK(rv) || SvTYPE(SvRV(rv)) != SVt_PVHV) {
200 3 1 Newx(keep, nexcl ? nexcl : 1, SV *);
0 3 Newx(keep, nexcl ? nexcl : 1, SV *);
3 1 Newx(keep, nexcl ? nexcl : 1, SV *);
201 4 4 for (i = 0; i < nexcl; i++) keep[i] = excl[i];
204 0 4 EXTEND(SP, 2 * (IV)HvUSEDKEYS(hv));
4 0 EXTEND(SP, 2 * (IV)HvUSEDKEYS(hv));
0 4 EXTEND(SP, 2 * (IV)HvUSEDKEYS(hv));
0 4 EXTEND(SP, 2 * (IV)HvUSEDKEYS(hv));
0 0 EXTEND(SP, 2 * (IV)HvUSEDKEYS(hv));
206 10 4 while ((he = hv_iternext(hv))) {
209 11 6 for (i = 0; i < nexcl; i++) {
210 4 7 if (sv_eq(k, keep[i])) { skip = 1; break; }
212 4 6 if (skip) continue;
228 9 5 for (i = 0; i < pat->n; i++) {
230 5 4 if (el->kind == DD_SLURPY) continue;
231 4 0 if (el->key)
255 31 99 if (shape == DD_HASH) {
258 5 26 if (c == '%') { /* %rest: remaining keys */
265 25 1 if (c == '"' || c == '\'')
0 25 if (c == '"' || c == '\'')
269 1 24 if (!key) croak("let: expected a key in hash pattern");
274 24 1 if (lex_peek_unichar(0) != '=' ||
275 0 24 PL_parser->bufptr[1] != '>')
285 114 9 if (c == '[' || c == '{') {
4 110 if (c == '[' || c == '{') {
294 93 17 if (DD_IS_ARRAYLIKE(shape) && (c == 'u')) {
7 86 if (DD_IS_ARRAYLIKE(shape) && (c == 'u')) {
296 7 0 if (strnEQ(PL_parser->bufptr, "undef", 5)) {
298 7 0 if (!isALNUM(after) && after != '_') {
7 0 if (!isALNUM(after) && after != '_') {
300 35 7 for (i = 0; i < 5; i++) lex_read_unichar(0);
312 93 10 if (sigil == '@' || sigil == '%') {
1 92 if (sigil == '@' || sigil == '%') {
319 10 82 if (c == '=' && PL_parser->bufptr[1] != '>') {
10 0 if (c == '=' && PL_parser->bufptr[1] != '>') {
333 48 29 if (open == '[') { pat->shape = DD_ARRAY; close = ']'; }
334 20 9 else if (open == '{') { pat->shape = DD_HASH; close = '}'; }
335 8 1 else if (open == '(') { pat->shape = DD_LIST; close = ')'; }
340 73 3 if (lex_peek_unichar(0) == close) { lex_read_unichar(0); return; }
345 0 130 if (pat->n >= DD_MAX_ELEMS) croak("let: too many pattern elements");
351 16 112 if (el->kind == DD_SLURPY) {
353 1 15 if (lex_peek_unichar(0) != close)
362 58 54 if (c == ',') {
365 1 57 if (lex_peek_unichar(0) == close) { lex_read_unichar(0); return; }
368 53 1 if (c == close) { lex_read_unichar(0); return; }
386 0 49 if (sigil == '@') { lhs = newOP(OP_PADAV, 0); }
387 5 44 else if (sigil == '%') { lhs = newOP(OP_PADHV, 0); }
407 28 16 : dd_helem(aTHX_ src, el->key);
408 10 34 if (el->deflt) {
423 5 0 if (pat->shape == DD_HASH) {
424 5 0 if (el->sigil == '%')
436 64 39 for (i = 0; i < pat->n; i++) {
459 6 7 : dd_helem(aTHX_ src, el->key);
475 123 71 for (i = 0; i < pat->n; i++) {
477 103 20 if (el->name) SvREFCNT_dec(el->name);
478 23 100 if (el->key) SvREFCNT_dec(el->key);
479 0 123 if (el->deflt) op_free(el->deflt);
480 13 110 if (el->nested) { dd_free_pat(aTHX_ el->nested); Safefree(el->nested); }
494 14 44 if (pat->shape == DD_HASH) return 0;
495 75 32 for (i = 0; i < pat->n; i++) {
497 55 20 if (el->kind == DD_SCALAR) { if (el->deflt) return 0; }
8 47 if (el->kind == DD_SCALAR) { if (el->deflt) return 0; }
498 14 6 else if (el->kind == DD_HOLE) { /* -> undef in the LHS list */ }
499 10 4 else if (el->kind == DD_SLURPY) { if (i != pat->n - 1) return 0; }
0 10 else if (el->kind == DD_SLURPY) { if (i != pat->n - 1) return 0; }
510 59 32 for (i = 0; i < pat->n; i++) {
513 5 54 if (el->kind == DD_HOLE) {
519 9 45 if (sigil == '@') v = newOP(OP_PADAV, 0);
520 1 44 else if (sigil == '%') v = newOP(OP_PADHV, 0);