… | |
… | |
1068 | PL_op = (OP *)&myop; |
1068 | PL_op = (OP *)&myop; |
1069 | PL_op = PL_ppaddr[OP_ENTERSUB](aTHX); |
1069 | PL_op = PL_ppaddr[OP_ENTERSUB](aTHX); |
1070 | SPAGAIN; |
1070 | SPAGAIN; |
1071 | } |
1071 | } |
1072 | |
1072 | |
1073 | /* the tail of transfer: execute stuff we can onyl do afetr a transfer */ |
1073 | /* the tail of transfer: execute stuff we can only do after a transfer */ |
1074 | static void |
1074 | static void |
1075 | transfer_tail (void) |
1075 | transfer_tail (pTHX) |
1076 | { |
1076 | { |
1077 | struct coro *next = (struct coro *)transfer_next; |
1077 | struct coro *next = (struct coro *)transfer_next; |
1078 | transfer_next = 0; //D for temporary assertion in transfer |
1078 | transfer_next = 0; //D for temporary assertion in transfer |
1079 | assert (("FATAL ERROR: internal error 1067 in Coro module, please report", next));//D |
1079 | assert (("FATAL ERROR: internal error 1067 in Coro module, please report", next));//D |
1080 | |
1080 | |
… | |
… | |
1113 | |
1113 | |
1114 | /* inject a fake subroutine call to cctx_init */ |
1114 | /* inject a fake subroutine call to cctx_init */ |
1115 | cctx_prepare (aTHX_ (coro_cctx *)arg); |
1115 | cctx_prepare (aTHX_ (coro_cctx *)arg); |
1116 | |
1116 | |
1117 | /* cctx_run is the alternative tail of transfer() */ |
1117 | /* cctx_run is the alternative tail of transfer() */ |
1118 | transfer_tail (); |
1118 | transfer_tail (aTHX); |
1119 | |
1119 | |
1120 | /* somebody or something will hit me for both perl_run and PL_restartop */ |
1120 | /* somebody or something will hit me for both perl_run and PL_restartop */ |
1121 | PL_restartop = PL_op; |
1121 | PL_restartop = PL_op; |
1122 | perl_run (PL_curinterp); |
1122 | perl_run (PL_curinterp); |
1123 | |
1123 | |
… | |
… | |
1373 | prev__cctx->top_env = PL_top_env; |
1373 | prev__cctx->top_env = PL_top_env; |
1374 | PL_top_env = next->cctx->top_env; |
1374 | PL_top_env = next->cctx->top_env; |
1375 | coro_transfer (&prev__cctx->cctx, &next->cctx->cctx); |
1375 | coro_transfer (&prev__cctx->cctx, &next->cctx->cctx); |
1376 | } |
1376 | } |
1377 | |
1377 | |
1378 | transfer_tail (); |
1378 | transfer_tail (aTHX); |
1379 | } |
1379 | } |
1380 | } |
1380 | } |
1381 | |
1381 | |
1382 | #define TRANSFER(ta, force_cctx) transfer (aTHX_ (ta).prev, (ta).next, (force_cctx)) |
1382 | #define TRANSFER(ta, force_cctx) transfer (aTHX_ (ta).prev, (ta).next, (force_cctx)) |
1383 | #define TRANSFER_CHECK(ta) transfer_check (aTHX_ (ta).prev, (ta).next) |
1383 | #define TRANSFER_CHECK(ta) transfer_check (aTHX_ (ta).prev, (ta).next) |