Branch Coverage

Parser.xs
Criterion Covered Total %
branch 120 608 19.7


line true false branch
37 3 73 if (!*slot) *slot = gv_stashpv(name, GV_ADD);
81 2 48 if (!stash_IxHash) {
97 50 0 if (out_idx) *out_idx = idx_hv;
98 50 0 if (out_keys) *out_keys = keys_av;
99 50 0 if (out_vals) *out_vals = vals_av;
160 18 0 SV *sv = newSVpv(v->u.s ? v->u.s : "", 0);
170 0 0 if (v->type == DMS_OFFSET_DT) { slot = &stash_OffsetDateTime; name = "DMS::OffsetDateTime"; }
171 0 0 else if (v->type == DMS_LOCAL_DT) { slot = &stash_LocalDateTime; name = "DMS::LocalDateTime"; }
172 0 0 else if (v->type == DMS_LOCAL_DATE) { slot = &stash_LocalDate; name = "DMS::LocalDate"; }
174 0 0 SV *inner = newSVpv(v->u.s ? v->u.s : "", 0);
182 50 0 if (v->u.t.len > 0) {
186 92 50 for (size_t i = 0; i < v->u.t.len; i++) {
198 8 3 for (size_t i = 0; i < v->u.l.len; i++) {
233 4 0 SV *sv = newSVpv(v->u.s ? v->u.s : "", 0);
243 0 0 if (v->type == DMS_OFFSET_DT) { slot = &stash_OffsetDateTime; name = "DMS::OffsetDateTime"; }
244 0 0 else if (v->type == DMS_LOCAL_DT) { slot = &stash_LocalDateTime; name = "DMS::LocalDateTime"; }
245 0 0 else if (v->type == DMS_LOCAL_DATE) { slot = &stash_LocalDate; name = "DMS::LocalDate"; }
247 0 0 SV *inner = newSVpv(v->u.s ? v->u.s : "", 0);
254 3 5 if (v->u.t.len > 0) {
258 4 8 for (size_t i = 0; i < v->u.t.len; i++) {
278 0 0 for (size_t i = 0; i < v->u.l.len; i++) {
294 41 0 SV *content_sv = newSVpv(ac->content ? ac->content : "", 0);
297 1 40 const char *kind = (ac->kind == DMS_COMMENT_BLOCK) ? "block" : "line";
308 61 1 if (n > 0) av_extend(av, (SSize_t)n - 1);
309 62 62 for (size_t i = 0; i < n; i++) {
311 1 61 if (seg->is_index) {
315 61 0 SV *k = newSVpv(seg->key ? seg->key : "", 0);
340 6 0 (sf->kind == DMS_STRING_BASIC) ? "basic" :
341 3 3 (sf->kind == DMS_STRING_LITERAL) ? "literal" :
344 3 3 if (sf->kind == DMS_STRING_HEREDOC) {
346 3 0 ? "basic_triple" : "literal_triple";
348 3 0 if (sf->label) {
356 0 3 if (sf->num_modifiers > 0) av_extend(mods, (SSize_t)sf->num_modifiers - 1);
357 0 3 for (size_t i = 0; i < sf->num_modifiers; i++) {
360 0 0 SV *name = newSVpv(mc->name ? mc->name : "", 0);
367 0 0 if (mc->num_args > 0) av_extend(args, (SSize_t)mc->num_args - 1);
368 0 0 for (size_t j = 0; j < mc->num_args; j++) {
369 0 0 if (mc->args[j]) {
388 6 15 if (lit->is_string_form) {
389 6 0 if (lit->string_form) {
393 15 0 if (lit->integer_lit) {
408 6 34 if (n > 0) av_extend(av, (SSize_t)n - 1);
409 21 40 for (size_t i = 0; i < n; i++) {
422 19 21 if (n > 0) av_extend(av, (SSize_t)n - 1);
423 41 40 for (size_t i = 0; i < n; i++) {
428 21 20 (ac->position == DMS_COMMENT_LEADING) ? "leading" :
429 21 0 (ac->position == DMS_COMMENT_INNER) ? "inner" :
430 17 4 (ac->position == DMS_COMMENT_TRAILING) ? "trailing" :
480 0 0 if (want <= j->cap) return;
481 0 0 size_t cap = j->cap ? j->cap : 4096;
482 0 0 while (cap < want) cap *= 2;
488 0 0 if (j->len + 1 > j->cap) jbuf_grow(j, 1);
493 0 0 if (j->len + n > j->cap) jbuf_grow(j, n);
504 0 0 if (n <= 0) return;
506 0 0 if (j->len + need > j->cap) jbuf_grow(j, need);
516 0 0 for (size_t i = 0; i < n; i++) {
527 0 0 if (c < 0x20) {
547 0 0 if (v == INT64_MIN) {
551 0 0 uint64_t u = neg ? (uint64_t)(-v) : (uint64_t)v;
553 0 0 do { *--p = (char)('0' + (u % 10)); u /= 10; } while (u);
554 0 0 if (neg) *--p = '-';
570 0 0 if (v != v) { jbuf_putcstr(j, "nan"); return; }
571 0 0 if (v > 1.7976931348623157e308) { jbuf_putcstr(j, "inf"); return; }
572 0 0 if (v < -1.7976931348623157e308) { jbuf_putcstr(j, "-inf"); return; }
576 0 0 for (int p = 1; p <= 17; p++) {
579 0 0 if (back == v) { chosen_n = n; break; }
581 0 0 if (chosen_n == 0) {
589 0 0 for (int i = 0; i < chosen_n; i++) {
591 0 0 if (c == '.') has_dot_or_e = 1;
592 0 0 if (c == 'e' || c == 'E') {
0 0 if (c == 'e' || c == 'E') {
597 0 0 if (i < chosen_n && buf[i] == '+') { i++; }
0 0 if (i < chosen_n && buf[i] == '+') { i++; }
598 0 0 else if (i < chosen_n && buf[i] == '-') { sign = -1; i++; }
0 0 else if (i < chosen_n && buf[i] == '-') { sign = -1; i++; }
600 0 0 while (i < chosen_n && buf[i] == '0') i++;
0 0 while (i < chosen_n && buf[i] == '0') i++;
601 0 0 if (i >= chosen_n || buf[i] < '0' || buf[i] > '9') {
0 0 if (i >= chosen_n || buf[i] < '0' || buf[i] > '9') {
0 0 if (i >= chosen_n || buf[i] < '0' || buf[i] > '9') {
607 0 0 if (sign < 0) out[oi++] = '-';
608 0 0 while (i < chosen_n) out[oi++] = buf[i++];
613 0 0 if (!has_dot_or_e) {
647 0 0 jbuf_putcstr(j, v->u.b ? "true" : "false");
662 0 0 const char *s = v->u.s ? v->u.s : "";
663 0 0 for (const char *p = s; *p; p++) {
674 0 0 if (c < 0x20) {
704 0 0 if (v->u.t.len == 0) { jbuf_puts(j, "{}", 2); return; }
706 0 0 for (size_t i = 0; i < v->u.t.len; i++) {
712 0 0 if (i + 1 < v->u.t.len) jbuf_putc(j, ',');
720 0 0 if (v->u.l.len == 0) { jbuf_puts(j, "[]", 2); return; }
722 0 0 for (size_t i = 0; i < v->u.l.len; i++) {
725 0 0 if (i + 1 < v->u.l.len) jbuf_putc(j, ',');
738 0 0 if (doc->meta) {
785 2 0 if (d->buf) Safefree(d->buf);
792 0 0 if (newcap < 256) newcap = 256;
793 0 0 while (newcap < d->len + need) newcap *= 2;
799 0 12 if (d->len + 1 > d->cap) dbuf_grow(aTHX_ d, 1);
804 0 8 if (d->len + n > d->cap) dbuf_grow(aTHX_ d, n);
811 0 4 if (d->len + need > d->cap) dbuf_grow(aTHX_ d, need);
812 0 4 for (int i = 0; i < level; i++) {
823 0 4 if (n == 0) return 0;
825 4 0 if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_'))
4 0 if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_'))
4 0 if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_'))
0 4 if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_'))
0 0 if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_'))
827 14 4 for (STRLEN i = 1; i < n; i++) {
829 14 0 if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
14 0 if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
14 0 if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
0 14 if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
0 0 if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
0 0 if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ||
830 0 0 (c >= '0' && c <= '9') || c == '_' || c == '-'))
0 0 (c >= '0' && c <= '9') || c == '_' || c == '-'))
841 0 0 for (STRLEN i = 0; i < n; i++) {
843 0 0 if (c == '\\' || c == '"' || c < 0x20) { dirty = 1; break; }
0 0 if (c == '\\' || c == '"' || c < 0x20) { dirty = 1; break; }
0 0 if (c == '\\' || c == '"' || c < 0x20) { dirty = 1; break; }
845 0 0 if (d->len + n + 2 > d->cap) dbuf_grow(aTHX_ d, n + 2);
847 0 0 if (!dirty) {
850 0 0 if (d->len + 1 > d->cap) dbuf_grow(aTHX_ d, 1);
854 0 0 for (STRLEN i = 0; i < n; i++) {
856 0 0 if (d->len + 6 > d->cap) dbuf_grow(aTHX_ d, 6);
866 0 0 if (c < 0x20) {
880 4 0 if (is_bare_key_ascii(s, n)) {
893 0 0 if (!slot || !*slot || !SvROK(*slot)) return NULL;
0 0 if (!slot || !*slot || !SvROK(*slot)) return NULL;
0 0 if (!slot || !*slot || !SvROK(*slot)) return NULL;
895 0 0 if (SvTYPE(rv) != SVt_PVAV) return NULL;
902 0 2 if (!SvRMAGICAL((SV *)hv)) return NULL;
906 2 0 if (!mg || !mg->mg_obj) return NULL;
0 2 if (!mg || !mg->mg_obj) return NULL;
908 0 2 if (!SvROK(obj)) return NULL;
910 0 2 if (!SvOBJECT(inner)) return NULL;
912 0 2 if (!tied_stash) return NULL;
913 0 2 if (!stash_IxHash) stash_IxHash = gv_stashpv("Tie::IxHash", GV_ADD);
914 0 2 if (tied_stash != stash_IxHash) return NULL;
915 0 2 if (SvTYPE(inner) != SVt_PVAV) return NULL;
935 0 8 if (!SvROK(rv)) return BLE_OTHER;
937 0 8 if (!SvOBJECT(target)) return BLE_OTHER;
939 0 8 if (!st) return BLE_OTHER;
942 1 7 if (!stash_Bool) stash_Bool = gv_stashpv("DMS::Bool", GV_ADD);
943 0 8 if (st == stash_Bool) return BLE_BOOL;
944 0 8 if (!stash_Integer) stash_Integer = gv_stashpv("DMS::Integer", GV_ADD);
945 8 0 if (st == stash_Integer) return BLE_INTEGER;
946 0 0 if (!stash_Float) stash_Float = gv_stashpv("DMS::Float", GV_ADD);
947 0 0 if (st == stash_Float) return BLE_FLOAT;
948 0 0 if (!stash_OffsetDateTime) stash_OffsetDateTime = gv_stashpv("DMS::OffsetDateTime", GV_ADD);
949 0 0 if (st == stash_OffsetDateTime) return BLE_OFFSET_DT;
950 0 0 if (!stash_LocalDateTime) stash_LocalDateTime = gv_stashpv("DMS::LocalDateTime", GV_ADD);
951 0 0 if (st == stash_LocalDateTime) return BLE_LOCAL_DT;
952 0 0 if (!stash_LocalDate) stash_LocalDate = gv_stashpv("DMS::LocalDate", GV_ADD);
953 0 0 if (st == stash_LocalDate) return BLE_LOCAL_DATE;
954 0 0 if (!stash_LocalTime) stash_LocalTime = gv_stashpv("DMS::LocalTime", GV_ADD);
955 0 0 if (st == stash_LocalTime) return BLE_LOCAL_TIME;
956 0 0 if (!stash_UnorderedTable) stash_UnorderedTable = gv_stashpv("DMS::UnorderedTable", GV_ADD);
957 0 0 if (st == stash_UnorderedTable) return BLE_UNORDERED;
964 4 0 if (!v || !SvOK(v)) {
0 4 if (!v || !SvOK(v)) {
970 4 0 if (SvROK(v)) {
972 0 4 if (k == BLE_BOOL) {
974 0 0 if (SvTRUE(inner)) dbuf_puts(aTHX_ d, "true", 4);
978 4 0 if (k == BLE_INTEGER) {
985 0 0 if (k == BLE_FLOAT) {
988 0 0 if (Perl_isnan(f)) { dbuf_puts(aTHX_ d, "nan", 3); return; }
989 0 0 if (Perl_isinf(f)) {
990 0 0 dbuf_puts(aTHX_ d, f > 0 ? "inf" : "-inf", f > 0 ? 3 : 4);
0 0 dbuf_puts(aTHX_ d, f > 0 ? "inf" : "-inf", f > 0 ? 3 : 4);
1001 0 0 if (k >= BLE_OFFSET_DT && k <= BLE_LOCAL_TIME) {
0 0 if (k >= BLE_OFFSET_DT && k <= BLE_LOCAL_TIME) {
1009 0 0 if (SvTYPE(rv) == SVt_PVAV) {
1013 0 0 if (n == 0) { dbuf_puts(aTHX_ d, "[]", 2); return; }
1015 0 0 for (SSize_t i = 0; i < n; i++) {
1016 0 0 if (i > 0) dbuf_puts(aTHX_ d, ", ", 2);
1018 0 0 if (slot) emit_perl_value_inline(aTHX_ d, *slot);
1023 0 0 if (SvTYPE(rv) == SVt_PVHV) {
1029 0 0 AV *lite_keys = tied ? NULL : get_lite_keys(aTHX_ hv);
1031 0 0 if (tied) {
1033 0 0 AV *keys = slot ? (AV *)SvRV(*slot) : NULL;
1034 0 0 empty = !keys || av_len(keys) < 0;
0 0 empty = !keys || av_len(keys) < 0;
1035 0 0 } else if (lite_keys) {
1038 0 0 empty = !HvUSEDKEYS(hv);
1040 0 0 if (empty) { dbuf_puts(aTHX_ d, "{}", 2); return; }
1043 0 0 if (lite_keys) {
1045 0 0 for (SSize_t i = 0; i < n; i++) {
1047 0 0 if (!kp) continue;
1051 0 0 if (!vp) continue;
1052 0 0 if (!first) dbuf_puts(aTHX_ d, ", ", 2);
1058 0 0 } else if (tied) {
1064 0 0 for (SSize_t i = 0; i < n; i++) {
1067 0 0 if (!kp || !vp) continue;
0 0 if (!kp || !vp) continue;
1068 0 0 if (!first) dbuf_puts(aTHX_ d, ", ", 2);
1079 0 0 while ((he = hv_iternext(hv))) {
1080 0 0 if (!first) dbuf_puts(aTHX_ d, ", ", 2);
1083 0 0 char *ks = HePV(he, klen);
1110 2 0 if (tied) {
1113 2 0 if (!k_slot || !v_slot) return;
0 2 if (!k_slot || !v_slot) return;
1117 4 2 for (SSize_t i = 0; i < n; i++) {
1120 4 0 if (!kp || !vp) continue;
0 4 if (!kp || !vp) continue;
1125 4 0 if (v && SvROK(v)) {
4 0 if (v && SvROK(v)) {
1128 4 0 if (bk == BLE_OTHER || bk == BLE_UNORDERED) {
0 4 if (bk == BLE_OTHER || bk == BLE_UNORDERED) {
1129 0 0 if (SvTYPE(rv) == SVt_PVHV) {
1132 0 0 if (sub_tied) {
1134 0 0 if (sk && av_len((AV *)SvRV(*sk)) >= 0)
0 0 if (sk && av_len((AV *)SvRV(*sk)) >= 0)
1136 0 0 } else if (HvUSEDKEYS(sub)) {
0 0 } else if (HvUSEDKEYS(sub)) {
1139 0 0 } else if (SvTYPE(rv) == SVt_PVAV) {
1140 0 0 if (av_len((AV *)rv) >= 0) can_block = 1;
1147 0 4 if (can_block) {
1150 0 0 if (SvTYPE(rv) == SVt_PVHV) {
1166 0 0 if (lite_keys) {
1168 0 0 for (SSize_t i = 0; i < n; i++) {
1170 0 0 if (!kp) continue;
1174 0 0 if (!vp) continue;
1177 0 0 if (v && SvROK(v)) {
0 0 if (v && SvROK(v)) {
1180 0 0 if (bk == BLE_OTHER || bk == BLE_UNORDERED) {
0 0 if (bk == BLE_OTHER || bk == BLE_UNORDERED) {
1181 0 0 if (SvTYPE(rv) == SVt_PVHV) {
1185 0 0 if (SvRMAGICAL((SV *)sub) && get_ixhash_tied(aTHX_ sub)) {
0 0 if (SvRMAGICAL((SV *)sub) && get_ixhash_tied(aTHX_ sub)) {
1188 0 0 if (sk && av_len((AV *)SvRV(*sk)) >= 0)
0 0 if (sk && av_len((AV *)SvRV(*sk)) >= 0)
1192 0 0 if (sub_keys) {
1193 0 0 if (av_len(sub_keys) >= 0) can_block = 1;
1194 0 0 } else if (HvUSEDKEYS(sub)) {
0 0 } else if (HvUSEDKEYS(sub)) {
1198 0 0 } else if (SvTYPE(rv) == SVt_PVAV) {
1199 0 0 if (av_len((AV *)rv) >= 0) can_block = 1;
1206 0 0 if (can_block) {
1209 0 0 if (SvTYPE(rv) == SVt_PVHV) emit_perl_table(aTHX_ d, (HV *)rv, indent + 1);
1222 0 0 while ((he = hv_iternext(hv))) {
1224 0 0 char *ks = HePV(he, klen);
1227 0 0 if (v && SvROK(v)) {
0 0 if (v && SvROK(v)) {
1230 0 0 if (bk == BLE_OTHER || bk == BLE_UNORDERED) {
0 0 if (bk == BLE_OTHER || bk == BLE_UNORDERED) {
1231 0 0 if (SvTYPE(rv) == SVt_PVHV) {
1232 0 0 if (HvUSEDKEYS((HV *)rv)) can_block = 1;
0 0 if (HvUSEDKEYS((HV *)rv)) can_block = 1;
1233 0 0 } else if (SvTYPE(rv) == SVt_PVAV) {
1234 0 0 if (av_len((AV *)rv) >= 0) can_block = 1;
1241 0 0 if (can_block) {
1244 0 0 if (SvTYPE(rv) == SVt_PVHV) emit_perl_table(aTHX_ d, (HV *)rv, indent + 1);
1256 0 0 for (SSize_t i = 0; i < n; i++) {
1258 0 0 if (!slot) continue;
1261 0 0 if (v && SvROK(v)) {
0 0 if (v && SvROK(v)) {
1264 0 0 if (bk == BLE_OTHER || bk == BLE_UNORDERED) {
0 0 if (bk == BLE_OTHER || bk == BLE_UNORDERED) {
1265 0 0 if (SvTYPE(rv) == SVt_PVHV) {
1271 0 0 if (sub_tied) {
1273 0 0 if (sk && av_len((AV *)SvRV(*sk)) >= 0)
0 0 if (sk && av_len((AV *)SvRV(*sk)) >= 0)
1277 0 0 if (sub_lite_keys) {
1278 0 0 if (av_len(sub_lite_keys) >= 0) can_block = 1;
1279 0 0 } else if (HvUSEDKEYS(sub)) {
0 0 } else if (HvUSEDKEYS(sub)) {
1283 0 0 } else if (SvTYPE(rv) == SVt_PVAV) {
1284 0 0 if (av_len((AV *)rv) >= 0) can_block = 1;
1290 0 0 if (can_block) {
1293 0 0 if (SvTYPE(rv) == SVt_PVHV) emit_perl_table(aTHX_ d, (HV *)rv, indent + 1);
1306 2 0 if (!SvROK(doc_rv) || SvTYPE(SvRV(doc_rv)) != SVt_PVHV) {
0 2 if (!SvROK(doc_rv) || SvTYPE(SvRV(doc_rv)) != SVt_PVHV) {
1317 2 0 if (meta_slot && *meta_slot && SvOK(*meta_slot)) {
2 0 if (meta_slot && *meta_slot && SvOK(*meta_slot)) {
0 2 if (meta_slot && *meta_slot && SvOK(*meta_slot)) {
1319 0 0 if (SvROK(meta_sv) && SvTYPE(SvRV(meta_sv)) == SVt_PVHV) {
0 0 if (SvROK(meta_sv) && SvTYPE(SvRV(meta_sv)) == SVt_PVHV) {
1325 0 0 if (meta_tied) {
1327 0 0 if (kp && av_len((AV *)SvRV(*kp)) >= 0) has_keys = 1;
0 0 if (kp && av_len((AV *)SvRV(*kp)) >= 0) has_keys = 1;
1330 0 0 if (meta_lite_keys) {
1331 0 0 if (av_len(meta_lite_keys) >= 0) has_keys = 1;
1332 0 0 } else if (HvUSEDKEYS(meta_hv)) {
0 0 } else if (HvUSEDKEYS(meta_hv)) {
1336 0 0 if (has_keys) {
1345 2 0 if (body_slot && *body_slot) {
2 0 if (body_slot && *body_slot) {
1347 2 0 if (SvROK(body)) {
1349 2 0 if (SvTYPE(body_rv) == SVt_PVHV) {
1351 0 0 } else if (SvTYPE(body_rv) == SVt_PVAV) {
1357 0 0 } else if (SvOK(body)) {
1386 0 40 if (!doc) {
1394 6 34 if (doc->meta) {
1437 0 0 if (!doc) {
1485 0 0 if (!in_buf) croak("out of memory reading stdin");
1487 0 0 if (in_len == in_cap) {
1490 0 0 if (!in_buf) croak("out of memory reading stdin");
1500 0 0 if (got <= 0) break;
1507 0 0 if (!doc) {
1521 0 0 while (wrote < j.len) {
1533 0 0 if (n <= 0) { libc_free(j.buf); croak("write to stdout failed"); }
1556 4 4 if (!doc) {
1561 4 0 if (doc->meta) {