Branch Coverage

lib/XS/JIT/xs_jit_builder.c
Criterion Covered Total %
branch 298 472 63.1


line true false branch
17 18 12910 if (b->use_tabs) {
18 28 18 for (i = 0; i < b->indent; i++) {
23 68068 12910 for (i = 0; i < spaces; i++) {
48 369 0 if (b) {
50 369 0 if (b->enums) SvREFCNT_dec((SV*)b->enums);
51 369 0 if (b->memoized) SvREFCNT_dec((SV*)b->memoized);
114 90 0 if (b->indent > 0) {
221 552 67 if (value && *value) {
552 0 if (value && *value) {
350 102 5 if (min == max) {
352 2 3 } else if (max < 0) {
403 3 2 if (len_var && *len_var) {
3 0 if (len_var && *len_var) {
436 3 19 if (len && *len) {
3 0 if (len && *len) {
471 0 2 if (min_args > 0 || max_args >= 0) {
0 0 if (min_args > 0 || max_args >= 0) {
579 8 6 for (i = 0; i < num_attrs; i++) {
691 1 0 if (num_slots > 0) {
842 6 0 if (num_required > 0) {
844 9 6 for (i = 0; i < num_required; i++) {
887 1 9 if (type == 1) { /* TYPE_DEFINED */
891 3 6 } else if (type == 2) { /* TYPE_INT */
895 1 5 } else if (type == 3) { /* TYPE_NUM */
899 1 4 } else if (type == 4) { /* TYPE_STR */
903 0 4 } else if (type == 5) { /* TYPE_REF */
907 1 3 } else if (type == 6) { /* TYPE_ARRAYREF */
911 1 2 } else if (type == 7) { /* TYPE_HASHREF */
915 1 1 } else if (type == 8) { /* TYPE_CODEREF */
919 1 0 } else if (type == 9) { /* TYPE_OBJECT */
1132 17 14 for (i = 0; i < num_attrs; i++) {
1145 1 16 if (attr->coerce && attr->coerce_len > 0) {
1 0 if (attr->coerce && attr->coerce_len > 0) {
1170 3 14 if (attr->required) {
1178 3 14 if (attr->type > 0 && attr->type_msg) {
3 0 if (attr->type > 0 && attr->type_msg) {
1241 1 16 if (attr->weak) {
1296 1 13 if (call_build) {
1337 2 1 for (i = 0; i < num_args; i++) {
1361 2 1 for (i = 0; i < num_args; i++) {
1554 1 0 if (num_values > 0) {
1556 3 1 for (i = 0; i < num_values; i++) {
2272 2 1 if (xs_jit_xops_registered) return;
2301 0 0 SETs(ary[slot_index] ? ary[slot_index] : &PL_sv_undef);
2317 0 0 if (PL_op->op_private & 1) {
2330 0 0 SETs(ary[slot_index] ? ary[slot_index] : &PL_sv_undef);
2353 0 0 if (!OpHAS_SIBLING(pushmark)) {
2358 0 0 selfop = OpSIBLING(pushmark);
2360 0 0 if (!selfop || selfop->op_type == OP_RV2CV || selfop->op_type == OP_NULL) {
0 0 if (!selfop || selfop->op_type == OP_RV2CV || selfop->op_type == OP_NULL) {
0 0 if (!selfop || selfop->op_type == OP_RV2CV || selfop->op_type == OP_NULL) {
2365 0 0 OP* nextop = OpSIBLING(selfop);
2366 0 0 if (nextop && nextop->op_type != OP_RV2CV && nextop->op_type != OP_NULL) {
0 0 if (nextop && nextop->op_type != OP_RV2CV && nextop->op_type != OP_NULL) {
0 0 if (nextop && nextop->op_type != OP_RV2CV && nextop->op_type != OP_NULL) {
2403 0 0 if (!OpHAS_SIBLING(pushmark)) {
2408 0 0 selfop = OpSIBLING(pushmark);
2409 0 0 if (!selfop || selfop->op_type == OP_RV2CV || selfop->op_type == OP_NULL) {
0 0 if (!selfop || selfop->op_type == OP_RV2CV || selfop->op_type == OP_NULL) {
0 0 if (!selfop || selfop->op_type == OP_RV2CV || selfop->op_type == OP_NULL) {
2413 0 0 valop = OpSIBLING(selfop);
2417 0 0 if (valop && valop->op_type != OP_RV2CV && valop->op_type != OP_NULL) {
0 0 if (valop && valop->op_type != OP_RV2CV && valop->op_type != OP_NULL) {
0 0 if (valop && valop->op_type != OP_RV2CV && valop->op_type != OP_NULL) {
2418 0 0 OP* afterval = OpSIBLING(valop);
2419 0 0 if (!afterval || afterval->op_type == OP_RV2CV || afterval->op_type == OP_NULL) {
0 0 if (!afterval || afterval->op_type == OP_RV2CV || afterval->op_type == OP_NULL) {
0 0 if (!afterval || afterval->op_type == OP_RV2CV || afterval->op_type == OP_NULL) {
2426 0 0 if (is_setter) {
2471 0 2 if (!cv) return 0;
2512 0 2 if (!cv) return XS_JIT_INLINE_NONE;
2515 0 2 if (!mg) return XS_JIT_INLINE_NONE;
2518 1 1 if (mg->mg_ptr == (char*)S_ck_xs_jit_get) {
2520 1 0 } else if (mg->mg_ptr == (char*)S_ck_xs_jit_set) {
2597 0 0 if (classname && *classname) {
0 0 if (classname && *classname) {
2639 0 2 if (is_mortal) {
2667 0 1 if (is_mortal) {
2693 0 1 if (is_mortal) {
2718 0 0 if (is_mortal) {
3070 15 50 if (clause->and_clause) {
3077 6 59 if (clause->or_clause) {
3090 148 146 for (i = 0; i < num; i++) {
3118 26 0 if (!cond || !cond->if_clause) {
0 26 if (!cond || !cond->if_clause) {
3131 8 26 for (i = 0; i < cond->num_elsif; i++) {
3141 9 17 if (cond->num_else_actions > 0) {
3154 3 0 if (!given || given->num_when == 0) {
0 3 if (!given || given->num_when == 0) {
3156 0 0 if (given && given->num_default_actions > 0) {
0 0 if (given && given->num_default_actions > 0) {
3163 8 3 for (i = 0; i < given->num_when; i++) {
3167 2 6 if (!when->key && given->key) {
2 0 if (!when->key && given->key) {
3173 3 5 if (i == 0) {
3184 3 0 if (given->num_default_actions > 0) {
3202 150 0 if (!then_sv || !SvOK(then_sv)) {
0 150 if (!then_sv || !SvOK(then_sv)) {
3207 150 0 if (SvROK(then_sv) && SvTYPE(SvRV(then_sv)) == SVt_PVHV) {
148 2 if (SvROK(then_sv) && SvTYPE(SvRV(then_sv)) == SVt_PVHV) {
3216 28 120 if ((val = hv_fetchs(then_hv, "line", 0)) && SvOK(*val)) {
28 0 if ((val = hv_fetchs(then_hv, "line", 0)) && SvOK(*val)) {
3220 60 60 else if ((val = hv_fetchs(then_hv, "return_iv", 0)) && SvOK(*val)) {
60 0 else if ((val = hv_fetchs(then_hv, "return_iv", 0)) && SvOK(*val)) {
3224 4 56 else if ((val = hv_fetchs(then_hv, "return_nv", 0)) && SvOK(*val)) {
4 0 else if ((val = hv_fetchs(then_hv, "return_nv", 0)) && SvOK(*val)) {
3228 55 1 else if ((val = hv_fetchs(then_hv, "return_pv", 0)) && SvOK(*val)) {
55 0 else if ((val = hv_fetchs(then_hv, "return_pv", 0)) && SvOK(*val)) {
3232 0 1 else if ((val = hv_fetchs(then_hv, "return_sv", 0)) && SvOK(*val)) {
0 0 else if ((val = hv_fetchs(then_hv, "return_sv", 0)) && SvOK(*val)) {
3236 1 0 else if ((val = hv_fetchs(then_hv, "croak", 0)) && SvOK(*val)) {
1 0 else if ((val = hv_fetchs(then_hv, "croak", 0)) && SvOK(*val)) {
3247 2 0 else if (SvROK(then_sv) && SvTYPE(SvRV(then_sv)) == SVt_PVAV) {
2 0 else if (SvROK(then_sv) && SvTYPE(SvRV(then_sv)) == SVt_PVAV) {
3253 2 0 if (len > 0) {
3256 4 2 for (i = 0; i < len; i++) {
3258 4 0 if (elem && SvOK(*elem)) {
4 0 if (elem && SvOK(*elem)) {
3261 4 0 if (sub_actions && sub_count > 0) {
4 0 if (sub_actions && sub_count > 0) {
3280 0 131 if (!clause_hv) {
3287 55 76 if ((val = hv_fetchs(clause_hv, "key", 0)) && SvOK(*val)) {
55 0 if ((val = hv_fetchs(clause_hv, "key", 0)) && SvOK(*val)) {
3294 16 115 if ((val = hv_fetchs(clause_hv, "gt", 0)) && SvOK(*val)) {
16 0 if ((val = hv_fetchs(clause_hv, "gt", 0)) && SvOK(*val)) {
3298 16 99 else if ((val = hv_fetchs(clause_hv, "lt", 0)) && SvOK(*val)) {
16 0 else if ((val = hv_fetchs(clause_hv, "lt", 0)) && SvOK(*val)) {
3302 8 91 else if ((val = hv_fetchs(clause_hv, "gte", 0)) && SvOK(*val)) {
8 0 else if ((val = hv_fetchs(clause_hv, "gte", 0)) && SvOK(*val)) {
3306 0 91 else if ((val = hv_fetchs(clause_hv, "lte", 0)) && SvOK(*val)) {
0 0 else if ((val = hv_fetchs(clause_hv, "lte", 0)) && SvOK(*val)) {
3310 84 7 else if ((val = hv_fetchs(clause_hv, "eq", 0)) && SvOK(*val)) {
84 0 else if ((val = hv_fetchs(clause_hv, "eq", 0)) && SvOK(*val)) {
3314 2 5 else if ((val = hv_fetchs(clause_hv, "ne", 0)) && SvOK(*val)) {
2 0 else if ((val = hv_fetchs(clause_hv, "ne", 0)) && SvOK(*val)) {
3318 2 3 else if ((val = hv_fetchs(clause_hv, "m", 0)) && SvOK(*val)) {
2 0 else if ((val = hv_fetchs(clause_hv, "m", 0)) && SvOK(*val)) {
3322 0 3 else if ((val = hv_fetchs(clause_hv, "im", 0)) && SvOK(*val)) {
0 0 else if ((val = hv_fetchs(clause_hv, "im", 0)) && SvOK(*val)) {
3326 0 3 else if ((val = hv_fetchs(clause_hv, "nm", 0)) && SvOK(*val)) {
0 0 else if ((val = hv_fetchs(clause_hv, "nm", 0)) && SvOK(*val)) {
3330 0 3 else if ((val = hv_fetchs(clause_hv, "inm", 0)) && SvOK(*val)) {
0 0 else if ((val = hv_fetchs(clause_hv, "inm", 0)) && SvOK(*val)) {
3334 2 1 else if ((val = hv_fetchs(clause_hv, "exists", 0)) && SvOK(*val)) {
2 0 else if ((val = hv_fetchs(clause_hv, "exists", 0)) && SvOK(*val)) {
3337 1 0 else if ((val = hv_fetchs(clause_hv, "true", 0)) && SvOK(*val)) {
1 0 else if ((val = hv_fetchs(clause_hv, "true", 0)) && SvOK(*val)) {
3342 110 21 if ((val = hv_fetchs(clause_hv, "then", 0)) && SvOK(*val)) {
110 0 if ((val = hv_fetchs(clause_hv, "then", 0)) && SvOK(*val)) {
3347 15 116 if ((val = hv_fetchs(clause_hv, "and", 0)) && SvOK(*val) && SvROK(*val)) {
15 0 if ((val = hv_fetchs(clause_hv, "and", 0)) && SvOK(*val) && SvROK(*val)) {
15 0 if ((val = hv_fetchs(clause_hv, "and", 0)) && SvOK(*val) && SvROK(*val)) {
3352 6 125 if ((val = hv_fetchs(clause_hv, "or", 0)) && SvOK(*val) && SvROK(*val)) {
6 0 if ((val = hv_fetchs(clause_hv, "or", 0)) && SvOK(*val) && SvROK(*val)) {
6 0 if ((val = hv_fetchs(clause_hv, "or", 0)) && SvOK(*val) && SvROK(*val)) {
3362 146 39 if (actions) {
3368 0 137 if (!clause) return;
3372 15 122 if (clause->and_clause) {
3375 6 131 if (clause->or_clause) {
3385 0 26 if (!cond) return;
3387 26 0 if (cond->if_clause) {
3391 8 26 for (i = 0; i < cond->num_elsif; i++) {
3394 4 22 if (cond->elsif_clauses) {
3404 0 3 if (!given) return;
3406 8 3 for (i = 0; i < given->num_when; i++) {
3409 3 0 if (given->when_clauses) {
3426 74 18 for (i = 0; i < sw->num_cases; i++) {
3429 74 0 if (c->and_clause || c->or_clause) {
0 74 if (c->and_clause || c->or_clause) {
3456 13 5 if (string_ops > 0 && numeric_ops == 0 && other_ops == 0)
13 0 if (string_ops > 0 && numeric_ops == 0 && other_ops == 0)
13 0 if (string_ops > 0 && numeric_ops == 0 && other_ops == 0)
3458 3 2 if (numeric_ops > 0 && string_ops == 0 && other_ops == 0)
3 0 if (numeric_ops > 0 && string_ops == 0 && other_ops == 0)
3 0 if (numeric_ops > 0 && string_ops == 0 && other_ops == 0)
3469 1 60 if (negated) {
3508 0 19 if (!sw) return;
3511 1 18 if (sw->num_cases == 0) {
3512 1 0 if (sw->num_default_actions > 0) {
3526 13 5 if (opt_type == 1) {
3530 3 2 } else if (opt_type == 2) {
3535 74 18 for (i = 0; i < sw->num_cases; i++) {
3539 61 13 if (opt_type == 1 && (c->expr_type == XS_JIT_EXPR_EQ ||
1 60 if (opt_type == 1 && (c->expr_type == XS_JIT_EXPR_EQ ||
3540 1 0 c->expr_type == XS_JIT_EXPR_NE)) {
3546 11 2 } else if (opt_type == 2) {
3552 0 2 if (!c->key) c->key = key;
3556 18 56 if (i == 0) {
3567 17 1 if (sw->num_default_actions > 0) {
3583 0 19 if (!sw) return;
3585 74 19 for (i = 0; i < sw->num_cases; i++) {
3588 18 1 if (sw->cases) {
3612 13 0 if (!b || !name || !values || num_values <= 0) return;
13 0 if (!b || !name || !values || num_values <= 0) return;
13 0 if (!b || !name || !values || num_values <= 0) return;
0 13 if (!b || !name || !values || num_values <= 0) return;
3615 5 8 if (opts) {
3617 2 3 if (opts->prefix) {
3629 96 13 for (j = 0; j < len; j++) {
3630 17 79 p[j] = toLOWER(p[j]);
3636 11 2 if (!prefix) {
3642 81 11 for (j = 0; j < len; j++) {
3643 67 14 p[j] = toUPPER(p[j]);
3653 59 13 for (i = 0; i < num_values; i++) {
3662 308 59 for (j = 0; j < len; j++) {
3663 46 262 p[j] = toUPPER(p[j]);
3713 59 13 for (i = 0; i < num_values; i++) {
3717 13 46 if (i == 0) {
3745 59 13 for (i = 0; i < num_values; i++) {
3757 13 0 if (lc_name_sv) SvREFCNT_dec(lc_name_sv);
3758 11 2 if (prefix_sv) SvREFCNT_dec(prefix_sv);
3772 13 0 if (!b || !name || !package) return NULL;
13 0 if (!b || !name || !package) return NULL;
0 13 if (!b || !name || !package) return NULL;
3775 12 1 if (!info_svp || !SvROK(*info_svp)) {
0 12 if (!info_svp || !SvROK(*info_svp)) {
3788 58 12 for (i = 0; i < num_vals; i++) {
3796 307 58 for (j = 0; j < len && j < sizeof(uc_name) - 1; j++) {
307 0 for (j = 0; j < len && j < sizeof(uc_name) - 1; j++) {
3797 46 261 uc_name[j] = toUPPER(val_name[j]);
3840 9 0 if (!b || !func_name) return;
0 9 if (!b || !func_name) return;
3843 2 7 if (opts) {
3844 1 1 if (opts->cache_attr) {
3888 1 8 if (ttl > 0) {
3942 1 8 if (ttl > 0) {
3990 10 0 if (!b || !func_name || !package) return NULL;
10 0 if (!b || !func_name || !package) return NULL;
0 10 if (!b || !func_name || !package) return NULL;
3993 9 1 if (!info_svp || !SvROK(*info_svp)) {
0 9 if (!info_svp || !SvROK(*info_svp)) {
4030 2 5 if (opts && opts->compare_key) {
2 0 if (opts && opts->compare_key) {
4316 2 2 if (opts && opts->observers_attr) {
2 0 if (opts && opts->observers_attr) {
4454 0 17 if (!b) return;