| line |
true |
false |
branch |
|
235
|
0 |
1616 |
ASSUME(origin->state == XSPR_STATE_FINISHED); |
|
237
|
765 |
851 |
if (callback->type == XSPR_CALLBACK_CHAIN) { |
|
240
|
2 |
849 |
} else if (callback->type == XSPR_CALLBACK_FINALLY_CHAIN) { |
|
243
|
1 |
1 |
RESULT_IS_REJECTED(origin->finished.result) ? origin->finished.result : callback->finally_chain.original_result |
|
246
|
28 |
821 |
} else if (callback->type == XSPR_CALLBACK_PERL || callback->type == XSPR_CALLBACK_FINALLY) { |
|
|
11 |
17 |
} else if (callback->type == XSPR_CALLBACK_PERL || callback->type == XSPR_CALLBACK_FINALLY) { |
|
250
|
11 |
821 |
if (callback->type == XSPR_CALLBACK_FINALLY) { |
|
256
|
11 |
0 |
if (callback_fn && SvOK(callback_fn)) { |
|
|
11 |
0 |
if (callback_fn && SvOK(callback_fn)) { |
|
262
|
796 |
25 |
if (RESULT_IS_RESOLVED(origin->finished.result)) { |
|
264
|
25 |
0 |
} else if (RESULT_IS_REJECTED(origin->finished.result)) { |
|
267
|
25 |
0 |
if (callback_fn && SvOK(callback_fn)) { |
|
|
25 |
0 |
if (callback_fn && SvOK(callback_fn)) { |
|
277
|
832 |
0 |
if (callback_fn != NULL) { |
|
280
|
11 |
821 |
if (callback->type == XSPR_CALLBACK_FINALLY) { |
|
291
|
41 |
791 |
if (next_promise == NULL) { |
|
292
|
1 |
40 |
if (callback->type == XSPR_CALLBACK_FINALLY && RESULT_IS_RESOLVED(callback_result) && RESULT_IS_REJECTED(origin->finished.result)) { |
|
|
1 |
0 |
if (callback->type == XSPR_CALLBACK_FINALLY && RESULT_IS_RESOLVED(callback_result) && RESULT_IS_REJECTED(origin->finished.result)) { |
|
|
1 |
0 |
if (callback->type == XSPR_CALLBACK_FINALLY && RESULT_IS_RESOLVED(callback_result) && RESULT_IS_REJECTED(origin->finished.result)) { |
|
307
|
783 |
8 |
if (callback_result->count > 0 && callback_result->state == XSPR_RESULT_RESOLVED) { |
|
|
778 |
5 |
if (callback_result->count > 0 && callback_result->state == XSPR_RESULT_RESOLVED) { |
|
310
|
769 |
9 |
if (promise != NULL) { |
|
312
|
2 |
767 |
if (callback_result->count > 1) { |
|
315
|
0 |
767 |
else if (promise == next_promise) { |
|
331
|
2 |
765 |
if (callback->type == XSPR_CALLBACK_FINALLY) { |
|
345
|
24 |
767 |
if (finish_promise) { |
|
349
|
8 |
16 |
if ((callback->type == XSPR_CALLBACK_FINALLY) && RESULT_IS_RESOLVED(callback_result)) { |
|
|
7 |
1 |
if ((callback->type == XSPR_CALLBACK_FINALLY) && RESULT_IS_RESOLVED(callback_result)) { |
|
352
|
4 |
3 |
if (RESULT_IS_REJECTED(final_result)) { |
|
371
|
4 |
20 |
if (final_result_needs_decref) { |
|
379
|
0 |
0 |
} else if (next_promise) { |
|
385
|
17 |
0 |
} else if (callback->type == XSPR_CALLBACK_ALL) { |
|
389
|
4 |
13 |
if (state->done) { |
|
391
|
3 |
1 |
if (RESULT_IS_REJECTED(origin->finished.result)) { |
|
394
|
8 |
5 |
} else if (RESULT_IS_RESOLVED(origin->finished.result)) { |
|
398
|
12 |
8 |
for (i = 0; i < (unsigned)origin->finished.result->count; i++) { |
|
404
|
4 |
4 |
if (state->remaining == 0) { |
|
409
|
0 |
5 |
ASSUME(RESULT_IS_REJECTED(origin->finished.result)); |
|
430
|
765 |
858 |
if (callback->type == XSPR_CALLBACK_CHAIN) { |
|
433
|
824 |
34 |
} else if (callback->type == XSPR_CALLBACK_PERL) { |
|
436
|
784 |
40 |
if (callback->perl.next != NULL) |
|
439
|
14 |
20 |
} else if (callback->type == XSPR_CALLBACK_FINALLY) { |
|
441
|
13 |
1 |
if (callback->finally.next != NULL) |
|
444
|
2 |
18 |
} else if (callback->type == XSPR_CALLBACK_FINALLY_CHAIN) { |
|
448
|
18 |
0 |
} else if (callback->type == XSPR_CALLBACK_ALL) { |
|
463
|
0 |
0 |
if (MY_CXT.in_flush) { |
|
470
|
0 |
0 |
while (MY_CXT.queue_head != NULL) { |
|
481
|
0 |
0 |
if (cur->next == NULL) { |
|
507
|
0 |
0 |
if (MY_CXT.queue_head == NULL) { |
|
508
|
0 |
0 |
ASSUME(MY_CXT.queue_tail == NULL); |
|
514
|
0 |
0 |
ASSUME(MY_CXT.queue_tail != NULL); |
|
528
|
0 |
0 |
PUSHMARK(SP); |
|
530
|
0 |
0 |
if (maybe_arg0) { |
|
531
|
0 |
0 |
EXTEND(SP, 2); |
|
535
|
0 |
0 |
EXTEND(SP, 1); |
|
543
|
0 |
0 |
FREETMPS; |
|
557
|
0 |
11 |
PUSHMARK(SP); |
|
558
|
0 |
11 |
EXTEND(SP, argscount); |
|
561
|
11 |
11 |
for (i=0; i
|
|
569
|
11 |
0 |
FREETMPS; |
|
578
|
0 |
0 |
if (MY_CXT.queue_head == NULL || MY_CXT.backend_scheduled || MY_CXT.in_flush) { |
|
|
0 |
0 |
if (MY_CXT.queue_head == NULL || MY_CXT.backend_scheduled || MY_CXT.in_flush) { |
|
|
0 |
0 |
if (MY_CXT.queue_head == NULL || MY_CXT.backend_scheduled || MY_CXT.in_flush) { |
|
585
|
0 |
0 |
if (!MY_CXT.pxs_flush_cr) { |
|
588
|
0 |
0 |
if (method_gv != NULL && isGV(method_gv) && GvCV(method_gv) != NULL) { |
|
|
0 |
0 |
if (method_gv != NULL && isGV(method_gv) && GvCV(method_gv) != NULL) { |
|
|
0 |
0 |
if (method_gv != NULL && isGV(method_gv) && GvCV(method_gv) != NULL) { |
|
606
|
0 |
833 |
if (!SvROK(perl_fn)) { |
|
613
|
0 |
833 |
PUSHMARK(SP); |
|
614
|
0 |
833 |
EXTEND(SP, input_count); |
|
615
|
838 |
833 |
for (i = 0; i < input_count; i++) { |
|
628
|
833 |
0 |
if (SvTRUE(ERRSV)) { |
|
|
6 |
827 |
if (SvTRUE(ERRSV)) { |
|
630
|
6 |
0 |
result->results[0] = newSVsv(ERRSV); |
|
633
|
815 |
827 |
for (i = 0; i < count; i++) { |
|
639
|
833 |
0 |
FREETMPS; |
|
654
|
1678 |
1629 |
if (--(result->refs) == 0) { |
|
655
|
46 |
1632 |
if (RESULT_IS_REJECTED(result) && result->rejection_should_warn) { |
|
|
11 |
35 |
if (RESULT_IS_REJECTED(result) && result->rejection_should_warn) { |
|
665
|
1682 |
1678 |
for (i = 0; i < result->count; i++) { |
|
696
|
0 |
1629 |
ASSUME(promise->state == XSPR_STATE_PENDING); |
|
707
|
0 |
1629 |
if (promise->on_ready_immediate != NULL) { |
|
715
|
28 |
1629 |
for (i = 0; i < count; i++) { |
|
719
|
14 |
14 |
if (pending_callbacks[i]->type == XSPR_CALLBACK_PERL && RESULT_IS_REJECTED(result) && result->rejection_should_warn) { |
|
|
8 |
6 |
if (pending_callbacks[i]->type == XSPR_CALLBACK_PERL && RESULT_IS_REJECTED(result) && result->rejection_should_warn) { |
|
|
6 |
2 |
if (pending_callbacks[i]->type == XSPR_CALLBACK_PERL && RESULT_IS_REJECTED(result) && result->rejection_should_warn) { |
|
721
|
6 |
0 |
if (on_reject && SvOK(on_reject)) { |
|
|
6 |
0 |
if (on_reject && SvOK(on_reject)) { |
|
726
|
0 |
28 |
if (MY_CXT.deferral_cr) { |
|
734
|
0 |
1629 |
if (promise->self_sv_ref != NULL) { |
|
742
|
0 |
0 |
if (!SvWEAKREF(promise->self_sv_ref)) { |
|
750
|
0 |
1629 |
if (MY_CXT.deferral_cr) { |
|
775
|
14 |
12 |
for (i=0; icount; i++) { |
|
798
|
1645 |
2408 |
if (--(promise->refs) == 0) { |
|
799
|
16 |
1629 |
if (promise->state == XSPR_STATE_PENDING) { |
|
804
|
7 |
16 |
for (i = 0; i < count; i++) { |
|
809
|
1629 |
0 |
} else if (promise->state == XSPR_STATE_FINISHED) { |
|
816
|
0 |
1645 |
if (promise->on_ready_immediate != NULL) { |
|
843
|
799 |
25 |
if (SvOK(on_resolve)) |
|
845
|
36 |
788 |
if (SvOK(on_reject)) |
|
848
|
784 |
40 |
if (next) |
|
858
|
14 |
0 |
if (SvOK(on_finally)) |
|
861
|
13 |
1 |
if (next) |
|
899
|
12 |
6 |
for (i = 0; i < state->total; i++) { |
|
911
|
11 |
18 |
if (state->refs == 0) { |
|
914
|
22 |
11 |
for (i = 0; i < state->total; i++) { |
|
915
|
12 |
10 |
if (state->results[i]) SvREFCNT_dec(state->results[i]); |
|
927
|
0 |
11 |
if (g->state) pxs_all_state_decref(aTHX_ g->state); |
|
928
|
0 |
11 |
if (g->output) xspr_promise_decref(aTHX_ g->output); |
|
935
|
0 |
18 |
if (g->callback) xspr_callback_free(aTHX_ g->callback); |
|
954
|
35 |
1588 |
if (promise->state == XSPR_STATE_PENDING) { |
|
959
|
1588 |
0 |
} else if (promise->state == XSPR_STATE_FINISHED) { |
|
961
|
0 |
1588 |
if (MY_CXT.deferral_cr) { |
|
976
|
800 |
0 |
if (input == NULL || !sv_isobject(input)) { |
|
|
13 |
787 |
if (input == NULL || !sv_isobject(input)) { |
|
981
|
786 |
1 |
if (sv_derived_from(input, PROMISE_CLASS)) { |
|
990
|
1 |
0 |
if (method_gv != NULL && isGV(method_gv) && GvCV(method_gv) != NULL) { |
|
|
1 |
0 |
if (method_gv != NULL && isGV(method_gv) && GvCV(method_gv) != NULL) { |
|
|
1 |
0 |
if (method_gv != NULL && isGV(method_gv) && GvCV(method_gv) != NULL) { |
|
993
|
0 |
1 |
if (!converter_cv) croak("Need " CONVERTER_CR_NAME "!"); |
|
999
|
1 |
0 |
if (new_result->state == XSPR_RESULT_RESOLVED && |
|
1000
|
1 |
0 |
new_result->results != NULL && |
|
1001
|
1 |
0 |
new_result->count == 1 && |
|
1053
|
1645 |
0 |
if (dml_svgv) { |
|
1057
|
1645 |
0 |
promise->detect_leak_pid = detect_leak_perl && SvTRUE(detect_leak_perl) ? getpid() : 0; |
|
|
4 |
1641 |
promise->detect_leak_pid = detect_leak_perl && SvTRUE(detect_leak_perl) ? getpid() : 0; |
|
1064
|
797 |
41 |
if (GIMME_V != G_VOID) { |
|
1086
|
5 |
1686 |
if (promise->detect_leak_pid && PXS_IS_GLOBAL_DESTRUCTION && promise->detect_leak_pid == getpid()) { |
|
|
3 |
2 |
if (promise->detect_leak_pid && PXS_IS_GLOBAL_DESTRUCTION && promise->detect_leak_pid == getpid()) { |
|
|
2 |
1 |
if (promise->detect_leak_pid && PXS_IS_GLOBAL_DESTRUCTION && promise->detect_leak_pid == getpid()) { |
|
1095
|
3 |
3 |
HV *stash = (self_sv == NULL) ? NULL : SvSTASH( SvRV(self_sv) ); |
|
1097
|
3 |
3 |
if (stash != NULL) { |
|
1098
|
3 |
0 |
pkgname = HvNAME(stash); |
|
|
3 |
0 |
pkgname = HvNAME(stash); |
|
|
0 |
3 |
pkgname = HvNAME(stash); |
|
|
0 |
0 |
pkgname = HvNAME(stash); |
|
|
3 |
0 |
pkgname = HvNAME(stash); |
|
|
0 |
3 |
pkgname = HvNAME(stash); |
|
1101
|
3 |
3 |
if (pkgname == NULL) pkgname = DEFERRED_CLASS; |
|
1103
|
2 |
4 |
if (my_items == 0) { |
|
1115
|
804 |
797 |
for (i = 0; i < argslen; i++) { |
|
1129
|
31 |
30 |
for (i = 0; i < argslen; i++) { |
|
1132
|
30 |
1 |
if (!has_defined && SvOK(result->results[i])) { |
|
|
24 |
6 |
if (!has_defined && SvOK(result->results[i])) { |
|
1137
|
6 |
24 |
if (!has_defined) { |
|
1138
|
3 |
3 |
const char* funcname = (self_sv == NULL) ? "rejected" : "reject"; |
|
1176
|
0 |
772 |
if (immortalize) _IMMORTALIZE_PROMISE_SV(promise_sv, promise_p); |
|
1188
|
0 |
11 |
if (immortalize) _IMMORTALIZE_PROMISE_SV(promise_sv, promise_p); |
|
1221
|
0 |
0 |
exs_call_method_void( |
|
1229
|
0 |
0 |
exs_call_method_void( |
|
1252
|
0 |
0 |
exs_call_method_void( |
|
1260
|
0 |
0 |
exs_call_method_void( |
|
1281
|
0 |
0 |
exs_call_method_void( |
|
1289
|
0 |
0 |
exs_call_method_void( |
|
1433
|
0 |
0 |
if (MY_CXT.deferral_cr) { |
|
1437
|
0 |
0 |
if (MY_CXT.deferral_arg) { |
|
1441
|
0 |
0 |
if (MY_CXT.stop_cr) { |
|
1447
|
0 |
0 |
MY_CXT.deferral_arg = SvOK(deferral_arg) ? SvREFCNT_inc(deferral_arg) : NULL; |
|
1451
|
0 |
0 |
MY_CXT.stop_cr = stop_cr ? SvREFCNT_inc(stop_cr) : NULL; |
|
1476
|
0 |
25 |
if (self->promise->state != XSPR_STATE_PENDING) { |
|
1482
|
23 |
2 |
if (GIMME_V == G_VOID) { |
|
1497
|
0 |
19 |
if (self->promise->state != XSPR_STATE_PENDING) { |
|
1503
|
19 |
0 |
if (GIMME_V == G_VOID) { |
|
1518
|
0 |
0 |
RETVAL = (self->promise->state == XSPR_STATE_PENDING); |
|
1527
|
2 |
0 |
if (self->promise->state == XSPR_STATE_FINISHED) { |
|
1531
|
2 |
0 |
if (GIMME_V == G_VOID) { |
|
1564
|
1 |
11 |
if (count == 0) { |
|
1592
|
22 |
11 |
for (i = 0; i < count; i++) { |
|
1596
|
4 |
18 |
if (input_promise == NULL) { |
|
1604
|
2 |
2 |
if (state->remaining == 0 && !state->done) { |
|
|
2 |
0 |
if (state->remaining == 0 && !state->done) { |
|
1638
|
3 |
799 |
_CROAK_IF_LOOKS_LIKE_INFINITE_RECURSION; |
|
1644
|
0 |
799 |
if (on_resolve == NULL) on_resolve = &PL_sv_undef; |
|
1645
|
788 |
11 |
if (on_reject == NULL) on_reject = &PL_sv_undef; |
|
1657
|
0 |
25 |
_CROAK_IF_LOOKS_LIKE_INFINITE_RECURSION; |
|
1671
|
0 |
14 |
_CROAK_IF_LOOKS_LIKE_INFINITE_RECURSION; |
|
1755
|
0 |
0 |
RETVAL = (self->promise->state != XSPR_STATE_PENDING); |
|
1765
|
0 |
0 |
ASSUME(self->promise->state == XSPR_STATE_FINISHED); |
|
1770
|
0 |
0 |
if (RESULT_IS_RESOLVED(self->promise->finished.result)) { |
|
1773
|
0 |
0 |
if (!result_count) XSRETURN_EMPTY; |
|
1778
|
0 |
0 |
EXTEND(SP, result_count); |
|
|
0 |
0 |
EXTEND(SP, result_count); |
|
1780
|
0 |
0 |
for (i=0; i
|
|
1787
|
0 |
0 |
EXTEND(SP, 1); |
|
1800
|
0 |
0 |
if (result_count) { |
|
1827
|
0 |
0 |
RETVAL = 0; |
|
1864
|
0 |
0 |
PUSHMARK(SP); |