Branch Coverage

encode.c
Criterion Covered Total %
branch 557 698 79.8


line true false branch
31 32 4 if (t->code == T_ARRAY || t->code == T_MAP) {
4 28 if (t->code == T_ARRAY || t->code == T_MAP) {
35 6 22 if (t->code == T_TUPLE) {
38 11 6 for (i = 0; i < t->tuple_len; i++) {
44 0 22 if (t->code == T_LOWCARDINALITY)
46 0 22 if (t->code == T_VARIANT)
49 15 7 if (t->code == T_STRING || t->code == T_FIXEDSTRING)
0 15 if (t->code == T_STRING || t->code == T_FIXEDSTRING)
51 15 0 if (t->code == T_UUID || t->code == T_IPV6)
0 15 if (t->code == T_UUID || t->code == T_IPV6)
53 15 0 if (t->code == T_FLOAT32 || t->code == T_FLOAT64 || t->code == T_BFLOAT16)
15 0 if (t->code == T_FLOAT32 || t->code == T_FLOAT64 || t->code == T_BFLOAT16)
0 15 if (t->code == T_FLOAT32 || t->code == T_FLOAT64 || t->code == T_BFLOAT16)
61 2 2018 if (!psv) return 0;
87 2 492499 if (!SvOK(val)) {
98 0 22 if (!SvOK(val)) {
104 15 7 if (len >= (STRLEN)t->param) {
117 2027 0 if (!SvOK(val)) {
119 2018 9 } else if (SvIOK(val) || SvNOK(val)) {
0 2018 } else if (SvIOK(val) || SvNOK(val)) {
121 8 1 if (iv < -128 || iv > 127)
2 6 if (iv < -128 || iv > 127)
127 2 2016 if (!enum_lookup_name(aTHX_ t, s, slen, &v))
135 6 0 if (!SvOK(val)) {
137 2 4 } else if (SvIOK(val) || SvNOK(val)) {
0 2 } else if (SvIOK(val) || SvNOK(val)) {
139 4 0 if (iv < -32768 || iv > 32767)
1 3 if (iv < -32768 || iv > 32767)
145 0 2 if (!enum_lookup_name(aTHX_ t, s, slen, &v))
153 5 7 if (looks_stringy(val)) {
156 0 5 if (!parse_decimal_int64_str(s, slen, t->param, &v64))
160 7 0 if (!(d >= (double)INT32_MIN && d <= (double)INT32_MAX))
0 7 if (!(d >= (double)INT32_MIN && d <= (double)INT32_MAX))
164 12 0 if (v64 < INT32_MIN || v64 > INT32_MAX)
2 10 if (v64 < INT32_MIN || v64 > INT32_MAX)
171 2008 7 if (looks_stringy(val)) {
174 0 2008 if (!parse_decimal_int64_str(s, slen, t->param, &v))
181 7 0 if (!(d > -9.223372036854776e18 && d < 9.223372036854776e18))
3 4 if (!(d > -9.223372036854776e18 && d < 9.223372036854776e18))
190 13 3 if (looks_stringy(val)) {
193 2 11 if (!parse_decimal256_str(s, slen, t->param, limbs))
198 0 3 if (!isfinite(d))
201 0 3 if (neg) d = -d;
209 3 0 if (d >= two255)
212 0 0 for (j = 0; j < 4 && d > 0; j++) {
0 0 for (j = 0; j < 4 && d > 0; j++) {
216 0 0 if (neg) {
217 0 0 for (j = 0; j < 4; j++) limbs[j] = ~limbs[j];
229 20 3 if (looks_stringy(val)) {
232 4 16 if (!parse_decimal128_str(s, slen, t->param, &hi, &lo))
236 0 3 if (!isfinite(d))
239 1 2 if (neg) d = -d;
243 1 2 if (d >= two127)
247 1 1 if (neg) {
249 0 1 hi = ~hi + (lo == 0 ? 1 : 0);
258 0 29 if (!SvOK(val)) v = 0;
259 21 8 else if (SvIOK(val) || SvNOK(val)) v = (uint16_t)SvUV(val);
0 21 else if (SvIOK(val) || SvNOK(val)) v = (uint16_t)SvUV(val);
263 1 20 if (looks_like_int_str(s, slen)) v = (uint16_t)SvUV(val);
271 0 7 if (!SvOK(val)) v = 0;
272 6 1 else if (SvIOK(val) || SvNOK(val)) v = (int32_t)SvIV(val);
0 6 else if (SvIOK(val) || SvNOK(val)) v = (int32_t)SvIV(val);
276 0 6 if (looks_like_int_str(s, slen)) v = (int32_t)SvIV(val);
284 0 51085 if (!SvOK(val)) v = 0;
285 15 51070 else if (SvIOK(val) || SvNOK(val)) v = (uint32_t)SvUV(val);
0 15 else if (SvIOK(val) || SvNOK(val)) v = (uint32_t)SvUV(val);
289 1 14 if (looks_like_int_str(s, slen)) v = (uint32_t)SvUV(val);
297 0 20 if (!SvOK(val)) v = 0;
298 3 17 else if (SvIOK(val)) v = (int64_t)SvIV(val);
299 4 13 else if (SvNOK(val)) v = dt64_double_to_int64(aTHX_ SvNV(val), t->param);
303 2 11 if (looks_like_int_str(s, slen))
305 3 8 else if (looks_like_number_str(s, slen))
314 10018 1 uint8_t v = SvOK(val) && SvTRUE(val) ? 1 : 0;
5009 5009 uint8_t v = SvOK(val) && SvTRUE(val) ? 1 : 0;
323 0 12 if (!SvOK(val)) {
328 1 11 if (slen == 16) {
330 10 1 } else if (slen == 36) {
333 10 0 if (s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-')
10 0 if (s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-')
10 0 if (s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-')
0 10 if (s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-')
335 325 9 for (i = 0; i < 36; i++) {
336 316 9 if (i == 8 || i == 13 || i == 18 || i == 23) continue;
307 9 if (i == 8 || i == 13 || i == 18 || i == 23) continue;
298 9 if (i == 8 || i == 13 || i == 18 || i == 23) continue;
9 289 if (i == 8 || i == 13 || i == 18 || i == 23) continue;
338 268 21 int nyb = (c >= '0' && c <= '9') ? c - '0'
339 289 0 : (c >= 'a' && c <= 'f') ? c - 'a' + 10
20 0 : (c >= 'a' && c <= 'f') ? c - 'a' + 10
340 20 1 : (c >= 'A' && c <= 'F') ? c - 'A' + 10
0 1 : (c >= 'A' && c <= 'F') ? c - 'A' + 10
341 1 0 : -1;
342 1 288 if (nyb < 0)
344 144 144 if ((j & 1) == 0) buf16[j >> 1] = nyb << 4;
356 80 10 for (i = 0; i < 8; i++) out[i] = buf16[7 - i];
357 80 10 for (i = 0; i < 8; i++) out[8+i] = buf16[15 - i];
363 0 14 if (!SvOK(val)) v = 0;
364 14 0 else if (SvIOK(val) || SvNOK(val)) v = (uint32_t)SvUV(val);
0 14 else if (SvIOK(val) || SvNOK(val)) v = (uint32_t)SvUV(val);
368 0 14 if (looks_like_int_str(s, slen)) {
372 0 14 if (slen >= sizeof(tmp))
377 2 12 if (inet_pton(AF_INET, tmp, &addr) != 1)
391 0 8 if (!SvOK(val)) {
396 1 7 if (slen == 16) {
400 0 7 if (slen >= sizeof(tmp))
404 1 6 if (inet_pton(AF_INET6, tmp, out) != 1)
447 1234 5 return t->code != T_ARRAY && t->code != T_TUPLE && t->code != T_NULLABLE
1234 0 return t->code != T_ARRAY && t->code != T_TUPLE && t->code != T_NULLABLE
448 1233 1 && t->code != T_MAP && t->code != T_LOWCARDINALITY
1233 0 && t->code != T_MAP && t->code != T_LOWCARDINALITY
449 1233 0 && t->code != T_VARIANT && t->code != T_JSON
1233 0 && t->code != T_VARIANT && t->code != T_JSON
450 1239 2 && t->code != T_DYNAMIC;
1233 0 && t->code != T_DYNAMIC;
455 13 4580 if (n <= 0) return NULL;
475 8033 3408 for (i = 0; i < n; i++) {
477 8033 0 if (!e || !SvOK(*e)) continue;
0 8033 if (!e || !SvOK(*e)) continue;
478 620 7413 if (SvROK(*e)) {
481 620 0 if (json_is_bool_ref(aTHX_ *e)) {
482 234 386 if (seen_kind == -1) seen_kind = JV_BOOL;
483 0 386 else if (seen_kind != JV_BOOL) return -1;
490 0 7413 if (SvIsBOOL(*e)) leaf = JV_BOOL;
493 2314 5099 if (SvIOK(*e) && !SvNOK(*e)) leaf = JV_INT64;
2314 0 if (SvIOK(*e) && !SvNOK(*e)) leaf = JV_INT64;
494 1752 3347 else if (SvNOK(*e)) {
497 0 0 && nv >= (NV)INT64_MIN && nv <= (NV)INT64_MAX)
0 0 && nv >= (NV)INT64_MIN && nv <= (NV)INT64_MAX)
498 0 1752 ? JV_INT64 : JV_FLOAT64;
502 2949 4464 if (seen_kind == -1) seen_kind = leaf;
503 1 4463 else if (seen_kind != leaf) return -1;
511 226 3182 if (seen_kind == -1) return JV_ARRAY_INT64;
522 2219 0 return pkg && (strcmp(pkg, "JSON::PP::Boolean") == 0
15 2204 return pkg && (strcmp(pkg, "JSON::PP::Boolean") == 0
523 15 0 || strcmp(pkg, "Types::Serialiser::Boolean") == 0
524 8 7 || strcmp(pkg, "JSON::XS::Boolean") == 0
525 1 7 || strcmp(pkg, "Cpanel::JSON::XS::Boolean") == 0
526 0 1 || strcmp(pkg, "boolean") == 0);
531 6924 5499 if (!(SvROK(val) && sv_isobject(val))) return 0;
4705 2219 if (!(SvROK(val) && sv_isobject(val))) return 0;
533 2219 0 return stash && json_pkg_is_bool(HvNAME(stash));
2219 0 return stash && json_pkg_is_bool(HvNAME(stash));
2219 0 return stash && json_pkg_is_bool(HvNAME(stash));
0 2219 return stash && json_pkg_is_bool(HvNAME(stash));
0 0 return stash && json_pkg_is_bool(HvNAME(stash));
2219 0 return stash && json_pkg_is_bool(HvNAME(stash));
0 2219 return stash && json_pkg_is_bool(HvNAME(stash));
2218 1 return stash && json_pkg_is_bool(HvNAME(stash));
539 685 5499 if (json_is_bool_ref(aTHX_ val)) return JV_BOOL;
541 6 5493 if (SvIsBOOL(val)) return JV_BOOL;
543 2355 3138 if (SvIOK(val) && !SvNOK(val)) return JV_INT64;
2355 0 if (SvIOK(val) && !SvNOK(val)) return JV_INT64;
544 907 2231 if (SvNOK(val)) {
552 0 907 if (n == (NV)(int64_t)n
553 0 0 && n >= (NV)INT64_MIN && n <= (NV)INT64_MAX)
0 0 && n >= (NV)INT64_MIN && n <= (NV)INT64_MAX)
566 4094 5499 if (SvROK(val) && !json_is_bool_ref(aTHX_ val))
3409 685 if (SvROK(val) && !json_is_bool_ref(aTHX_ val))
579 0 153 if (!SvOK(ev)) { buf_byte(aTHX_ b, 0); break; }
580 153 0 SV *bv = SvROK(ev) ? SvRV(ev) : ev;
585 579 0 buf_le64(aTHX_ b, SvOK(ev) ? (uint64_t)(int64_t)SvIV(ev) : 0);
588 436 0 buf_ledouble(aTHX_ b, SvOK(ev) ? SvNV(ev) : 0.0);
591 0 836 if (!SvOK(ev)) { buf_varint(aTHX_ b, 0); break; }
605 228 2 SV *bv = SvROK(val) ? SvRV(val) : val;
639 3307 2009 while ((he = hv_iternext(src))) {
644 791 2516 STRLEN new_len = prefix_len + (prefix_len ? 1 : 0) + klen;
648 791 2516 if (prefix_len) {
658 34 3273 && hv_exists(stop_paths, SvPVX(path_sv), new_len);
4 30 && hv_exists(stop_paths, SvPVX(path_sv), new_len);
660 3303 4 if (!stop_here
661 1522 1781 && SvROK(vsv) && SvTYPE(SvRV(vsv)) == SVt_PVHV
444 1078 && SvROK(vsv) && SvTYPE(SvRV(vsv)) == SVt_PVHV
662 444 0 && !json_is_bool_ref(aTHX_ vsv)) {
666 1 443 if (sv_isobject(vsv))
667 1 0 croak("JSON column: opaque blessed hashref (package '%s') "
1 0 croak("JSON column: opaque blessed hashref (package '%s') "
0 1 croak("JSON column: opaque blessed hashref (package '%s') "
0 0 croak("JSON column: opaque blessed hashref (package '%s') "
1 0 croak("JSON column: opaque blessed hashref (package '%s') "
0 1 croak("JSON column: opaque blessed hashref (package '%s') "
692 5419 46 if (r) return r;
693 21 25 if (pa->len < pb->len) return -1;
694 25 0 if (pa->len > pb->len) return 1;
710 870989 5274 for (r = 0; r < num_rows; r++) encode_scalar(aTHX_ b,values[r], t);
717 93206 1313 for (r = 0; r < num_rows; r++) {
719 93205 1 if (!SvROK(val) || SvTYPE(SvRV(val)) != SVt_PVAV)
0 93205 if (!SvROK(val) || SvTYPE(SvRV(val)) != SVt_PVAV)
728 1311 2 if (total_elems > 0) {
731 93203 1311 for (r = 0; r < num_rows; r++) {
735 275259 93203 for (i = 0; i < n; i++) {
737 275259 0 all_elems[idx++] = elem ? *elem : &PL_sv_undef;
749 2066 1032 for (i = 0; i < t->tuple_len; i++) {
750 4147 2064 for (r = 0; r < num_rows; r++) {
752 1 4146 if (!SvROK(val))
755 4139 7 if (SvTYPE(rv) == SVt_PVAV) {
757 4139 0 elem_values[r] = elem ? *elem : &PL_sv_undef;
758 7 0 } else if (SvTYPE(rv) == SVt_PVHV
759 6 1 && t->tuple_names && t->tuple_names[i]) {
6 0 && t->tuple_names && t->tuple_names[i]) {
763 5 1 elem_values[r] = elem ? *elem : &PL_sv_undef;
764 1 0 } else if (SvTYPE(rv) == SVt_PVHV) {
777 43089 1241 for (r = 0; r < num_rows; r++) {
781 1233 8 if (is_simple_type(t->inner)) {
782 43067 1233 for (r = 0; r < num_rows; r++) {
783 9228 33839 if (!SvOK(values[r])) encode_null_scalar(aTHX_ b, t->inner);
788 22 8 for (r = 0; r < num_rows; r++) {
789 9 13 if (!SvOK(values[r]))
804 17 8 for (r = 0; r < num_rows; r++) {
806 1 16 if (!SvROK(val))
809 7 9 if (SvTYPE(rv) == SVt_PVAV) {
811 9 0 } else if (SvTYPE(rv) == SVt_PVHV) {
816 13 9 while ((he = hv_iternext(hv))) {
834 16 8 for (r = 0; r < num_rows; r++) {
841 8 0 if (total > 0) {
844 16 8 for (r = 0; r < num_rows; r++) {
848 17 16 for (i = 0; i < n; i++) {
850 17 0 all[idx++] = elem ? *elem : &PL_sv_undef;
855 16 8 for (j = 0; j < 2; j++) {
858 34 16 for (k = 0; k < total; k++) {
859 34 0 if (!SvROK(all[k]) || SvTYPE(SvRV(all[k])) != SVt_PVAV)
0 34 if (!SvROK(all[k]) || SvTYPE(SvRV(all[k])) != SVt_PVAV)
863 34 0 col[k] = e ? *e : &PL_sv_undef;
895 34 16 for (v = 0; v < nvar; v++)
898 32 11 for (r = 0; r < num_rows; r++) {
900 12 20 if (!SvOK(val)) {
904 18 2 if (!SvROK(val) || SvTYPE(SvRV(val)) != SVt_PVAV)
0 18 if (!SvROK(val) || SvTYPE(SvRV(val)) != SVt_PVAV)
907 1 17 if (av_len(av) + 1 != 2)
911 17 0 IV idx = idx_sv ? SvIV(*idx_sv) : -1;
912 17 0 if (idx < 0 || idx >= nvar)
2 15 if (idx < 0 || idx >= nvar)
916 15 0 per_var[idx][counts[idx]++] = vsv ? *vsv : &PL_sv_undef;
920 24 11 for (v = 0; v < nvar; v++) {
944 7 14 TypeInfo *leaf = is_null ? inner->inner : inner;
952 1 20 int fixed_n = (leaf->code == T_FIXEDSTRING) ? leaf->param : 0;
954 1 20 if (fixed_n > 0) {
964 14 7 if (!is_null) {
965 1 13 if (fixed_n > 0) {
981 67402 21 for (r = 0; r < num_rows; r++) {
983 12 67390 if (!SvOK(val)) {
988 9 3 if (is_null) { indices[r] = 0; continue; }
995 6 67387 if (fixed_n > 0) {
998 5 1 if (slen >= (STRLEN)fixed_n) {
1011 721 66672 if (slot_sv) {
1024 17 4 if (dict_count <= 256) { idx_type = 0; idx_bytes = 1; }
1025 4 0 else if (dict_count <= 65536) { idx_type = 1; idx_bytes = 2; }
1026 0 0 else if (dict_count <= 0xFFFFFFFF) { idx_type = 2; idx_bytes = 4; }
1038 66693 21 for (di = 0; di < (SSize_t)dict_count; di++) {
1040 66693 0 dict_vals[di] = e ? *e : &PL_sv_undef;
1046 67402 21 for (r = 0; r < num_rows; r++) {
1082 15 196 if (t->tuple_len > 0) {
1085 20 15 for (sk = 0; sk < t->tuple_len; sk++) {
1090 2 18 if (inner->code == T_NULLABLE) inner = inner->inner;
1091 17 3 if (inner->code == T_MAP || inner->code == T_TUPLE) {
0 17 if (inner->code == T_MAP || inner->code == T_TUPLE) {
1100 209 2 if (num_rows > 0) {
1101 0 209 Newxz(row_hvs, num_rows, HV*);
1106 1709 209 for (r = 0; r < num_rows; r++) {
1108 141 1568 if (!SvOK(val)) { row_hvs[r] = NULL; continue; }
1109 1567 1 if (!SvROK(val) || SvTYPE(SvRV(val)) != SVt_PVHV)
0 1567 if (!SvROK(val) || SvTYPE(SvRV(val)) != SVt_PVHV)
1127 15 194 if (n_typed > 0 && num_rows > 0) {
14 1 if (n_typed > 0 && num_rows > 0) {
1131 18 14 for (tp = 0; tp < n_typed; tp++) {
1136 16 2 : make_null_placeholder(aTHX_ t->tuple[tp]);
1137 36 18 for (r = 0; r < num_rows; r++) {
1138 0 36 if (!row_hvs[r]) {
1144 30 6 if (e) {
1145 27 3 typed_vals[tp][r] = SvOK(*e) ? *e : missing;
1160 1707 209 for (r = 0; r < num_rows; r++) {
1161 141 1566 if (!row_hvs[r]) continue;
1164 2833 1566 while ((he = hv_iternext(row_hvs[r]))) {
1168 2833 0 if (e && SvOK(*e))
2622 211 if (e && SvOK(*e))
1181 0 209 int total = (int)HvUSEDKEYS(all_paths);
1182 194 15 if (total > 0) {
1192 2043 194 while ((he = hv_iternext(all_paths))) {
1199 171 23 if (num_paths > 1)
1202 2043 194 for (pi = 0; pi < num_paths; pi++) {
1214 194 15 if (num_paths > 0) {
1218 2043 193 for (p = 0; p < num_paths; p++) {
1219 21540 2042 for (r = 0; r < num_rows; r++) {
1220 1401 20139 if (!row_hvs[r]) continue;
1223 2626 17513 if (!e || !SvOK(*e)) continue;
4 2622 if (!e || !SvOK(*e)) continue;
1224 1076 1546 if (SvROK(*e) && !json_is_bool_ref(aTHX_ *e)
849 227 if (SvROK(*e) && !json_is_bool_ref(aTHX_ *e)
1225 0 849 && SvTYPE(SvRV(*e)) != SVt_PVAV)
1234 1 2621 if (k < 0)
1250 2042 208 for (p = 0; p < num_paths; p++)
1259 193 15 if (num_paths > 0) {
1264 2042 193 for (p = 0; p < num_paths; p++)
1270 2042 208 for (p = 0; p < num_paths; p++) {
1281 4372 2042 for (s = 0; s < wire_slots; s++) {
1283 2042 2330 if (k < 0) continue;
1296 15 193 if (n_typed > 0 && num_rows > 0) {
14 1 if (n_typed > 0 && num_rows > 0) {
1298 18 14 for (tp = 0; tp < n_typed; tp++)
1308 2042 208 for (p = 0; p < num_paths; p++) {
1313 21539 2042 for (r = 0; r < num_rows; r++) {
1314 1401 20138 if (!row_hvs[r]) { buf_byte(aTHX_ b, 0xff); continue; }
1317 2625 17513 if (!e || !SvOK(*e)) { buf_byte(aTHX_ b, 0xff); continue; }
4 2621 if (!e || !SvOK(*e)) { buf_byte(aTHX_ b, 0xff); continue; }
1326 4372 2042 for (s = 0; s < wire_slots; s++) {
1328 2042 2330 if (k_match < 0) continue;
1334 2330 0 && k_match <= JV_ARRAY_STRING);
847 1483 && k_match <= JV_ARRAY_STRING);
1335 847 1483 if (is_array) {
1337 9133 847 for (r = 0; r < num_rows; r++) {
1338 560 8573 if (!row_hvs[r]) continue;
1341 857 7716 if (!e || !SvOK(*e)) continue;
2 855 if (!e || !SvOK(*e)) continue;
1342 7 848 if (json_classify_value(aTHX_ *e) != k_match)
1352 24404 2330 for (r = 0; r < num_rows; r++) {
1353 1681 22723 if (!row_hvs[r]) continue;
1356 3488 19235 if (!e || !SvOK(*e)) continue;
5 3483 if (!e || !SvOK(*e)) continue;
1357 862 2621 if (json_classify_value(aTHX_ *e) != k_match) continue;
1359 848 1773 if (is_array) {
1362 1997 848 for (i = 0; i < n; i++) {
1364 1997 0 SV *ev = (elem && SvOK(*elem))
1365 1997 0 ? *elem : &PL_sv_undef;
1377 206 2 if (num_rows > 0) {
1393 6 0 if (num_rows > 0) {
1394 0 6 Newx(row_kinds, num_rows, int);
1397 18 5 for (r = 0; r < num_rows; r++) {
1399 5 13 if (!SvOK(val)) { row_kinds[r] = -1; continue; }
1400 5 8 if (SvROK(val) && !json_is_bool_ref(aTHX_ val)
4 1 if (SvROK(val) && !json_is_bool_ref(aTHX_ val)
1401 1 3 && SvTYPE(SvRV(val)) != SVt_PVAV)
1406 0 12 if (k < 0)
1421 17 5 for (s = 0; s < wire_slots; s++) {
1423 5 12 if (k < 0) continue;
1430 17 5 for (r = 0; r < num_rows; r++) {
1431 5 12 if (row_kinds[r] < 0) { buf_byte(aTHX_ b, 0xff); continue; }
1438 17 5 for (s = 0; s < wire_slots; s++) {
1440 5 12 if (k_match < 0) continue;
1442 12 0 && k_match <= JV_ARRAY_STRING);
3 9 && k_match <= JV_ARRAY_STRING);
1444 3 9 if (is_array) {
1446 9 3 for (r = 0; r < num_rows; r++) {
1447 6 3 if (row_kinds[r] != k_match) continue;
1452 9 3 for (r = 0; r < num_rows; r++) {
1453 6 3 if (row_kinds[r] != k_match) continue;
1456 7 3 for (i = 0; i < n; i++) {
1458 7 0 SV *ev = (elem && SvOK(*elem))
1459 7 0 ? *elem : &PL_sv_undef;
1464 35 9 for (r = 0; r < num_rows; r++) {
1465 26 9 if (row_kinds[r] != k_match) continue;