… | |
… | |
730 | static void |
730 | static void |
731 | swap_svs_enter (pTHX_ Coro__State c) |
731 | swap_svs_enter (pTHX_ Coro__State c) |
732 | { |
732 | { |
733 | int i; |
733 | int i; |
734 | |
734 | |
|
|
735 | for (i = 0; i <= AvFILLp (c->swap_sv); i += 2) |
|
|
736 | swap_sv (AvARRAY (c->swap_sv)[i], AvARRAY (c->swap_sv)[i + 1]); |
|
|
737 | } |
|
|
738 | |
|
|
739 | static void |
|
|
740 | swap_svs_leave (pTHX_ Coro__State c) |
|
|
741 | { |
|
|
742 | int i; |
|
|
743 | |
735 | for (i = AvFILLp (c->swap_sv) - 1; i >= 0; i -= 2) |
744 | for (i = AvFILLp (c->swap_sv) - 1; i >= 0; i -= 2) |
736 | swap_sv (AvARRAY (c->swap_sv)[i], AvARRAY (c->swap_sv)[i + 1]); |
|
|
737 | } |
|
|
738 | |
|
|
739 | static void |
|
|
740 | swap_svs_leave (pTHX_ Coro__State c) |
|
|
741 | { |
|
|
742 | int i; |
|
|
743 | |
|
|
744 | for (i = 0; i <= AvFILLp (c->swap_sv); i += 2) |
|
|
745 | swap_sv (AvARRAY (c->swap_sv)[i], AvARRAY (c->swap_sv)[i + 1]); |
745 | swap_sv (AvARRAY (c->swap_sv)[i], AvARRAY (c->swap_sv)[i + 1]); |
746 | } |
746 | } |
747 | |
747 | |
748 | #define SWAP_SVS_ENTER(coro) \ |
748 | #define SWAP_SVS_ENTER(coro) \ |
749 | if (ecb_expect_false ((coro)->swap_sv)) \ |
749 | if (ecb_expect_false ((coro)->swap_sv)) \ |
… | |
… | |
963 | #endif |
963 | #endif |
964 | |
964 | |
965 | New(54,PL_savestack,24,ANY); |
965 | New(54,PL_savestack,24,ANY); |
966 | PL_savestack_ix = 0; |
966 | PL_savestack_ix = 0; |
967 | PL_savestack_max = 24; |
967 | PL_savestack_max = 24; |
|
|
968 | #if !PERL_VERSION_ATLEAST (5,24,0) |
|
|
969 | /* perl 5.24 moves SS_MAXPUSH optimisation from */ |
|
|
970 | /* the header macros to PL_savestack_max */ |
|
|
971 | PL_savestack_max -= SS_MAXPUSH; |
|
|
972 | #endif |
968 | |
973 | |
969 | #if !PERL_VERSION_ATLEAST (5,10,0) |
974 | #if !PERL_VERSION_ATLEAST (5,10,0) |
970 | New(54,PL_retstack,4,OP*); |
975 | New(54,PL_retstack,4,OP*); |
971 | PL_retstack_ix = 0; |
976 | PL_retstack_ix = 0; |
972 | PL_retstack_max = 4; |
977 | PL_retstack_max = 4; |
… | |
… | |
2426 | else |
2431 | else |
2427 | { |
2432 | { |
2428 | av_clear (GvAV (PL_defgv)); |
2433 | av_clear (GvAV (PL_defgv)); |
2429 | hv_store (hv, "desc", sizeof ("desc") - 1, SvREFCNT_inc_NN (sv_async_pool_idle), 0); |
2434 | hv_store (hv, "desc", sizeof ("desc") - 1, SvREFCNT_inc_NN (sv_async_pool_idle), 0); |
2430 | |
2435 | |
|
|
2436 | if (ecb_expect_false (coro->swap_sv)) |
|
|
2437 | { |
|
|
2438 | swap_svs_leave (coro); |
|
|
2439 | SvREFCNT_dec_NN (coro->swap_sv); |
|
|
2440 | coro->swap_sv = 0; |
|
|
2441 | } |
|
|
2442 | |
2431 | coro->prio = 0; |
2443 | coro->prio = 0; |
2432 | |
2444 | |
2433 | if (coro->cctx && (coro->cctx->flags & CC_TRACE)) |
2445 | if (ecb_expect_false (coro->cctx) && ecb_expect_false (coro->cctx->flags & CC_TRACE)) |
2434 | api_trace (aTHX_ coro_current, 0); |
2446 | api_trace (aTHX_ coro_current, 0); |
2435 | |
2447 | |
2436 | frame->prepare = prepare_schedule; |
2448 | frame->prepare = prepare_schedule; |
2437 | av_push (av_async_pool, SvREFCNT_inc (hv)); |
2449 | av_push (av_async_pool, SvREFCNT_inc (hv)); |
2438 | } |
2450 | } |