… | |
… | |
87 | I32 savestack_max; |
87 | I32 savestack_max; |
88 | OP **retstack; |
88 | OP **retstack; |
89 | I32 retstack_ix; |
89 | I32 retstack_ix; |
90 | I32 retstack_max; |
90 | I32 retstack_max; |
91 | COP *curcop; |
91 | COP *curcop; |
92 | PMOP *curpm; |
|
|
93 | JMPENV *top_env; |
92 | JMPENV *top_env; |
94 | |
93 | |
95 | /* data associated with this coroutine (initial args) */ |
94 | /* data associated with this coroutine (initial args) */ |
96 | AV *args; |
95 | AV *args; |
97 | }; |
96 | }; |
… | |
… | |
598 | dSP; |
597 | dSP; |
599 | Coro__State ctx = (Coro__State)arg; |
598 | Coro__State ctx = (Coro__State)arg; |
600 | SV *sub_init = (SV*)get_cv(SUB_INIT, FALSE); |
599 | SV *sub_init = (SV*)get_cv(SUB_INIT, FALSE); |
601 | |
600 | |
602 | coro_init_stacks (aTHX); |
601 | coro_init_stacks (aTHX); |
603 | PL_curpm = 0; /* segfault on first access */ |
|
|
604 | /*PL_curcop = 0;*/ |
602 | /*PL_curcop = 0;*/ |
605 | /*PL_in_eval = PL_in_eval;*/ /* inherit */ |
603 | /*PL_in_eval = PL_in_eval;*/ /* inherit */ |
606 | SvREFCNT_dec (GvAV (PL_defgv)); |
604 | SvREFCNT_dec (GvAV (PL_defgv)); |
607 | GvAV (PL_defgv) = ctx->args; |
605 | GvAV (PL_defgv) = ctx->args; |
608 | |
606 | |
… | |
… | |
750 | setup_coro (next); |
748 | setup_coro (next); |
751 | } |
749 | } |
752 | |
750 | |
753 | /* |
751 | /* |
754 | * xnext is now either prev or next, depending on wether |
752 | * xnext is now either prev or next, depending on wether |
755 | * we switched the c stack or not. that's why i use a global |
753 | * we switched the c stack or not. that's why I use a global |
756 | * variable, that should become thread-specific at one point. |
754 | * variable, that should become thread-specific at one point. |
757 | */ |
755 | */ |
758 | xnext->cursp = stacklevel; |
756 | xnext->cursp = stacklevel; |
759 | } |
757 | } |
760 | |
758 | |
… | |
… | |
902 | coro_state_stash = gv_stashpv ("Coro::State", TRUE); |
900 | coro_state_stash = gv_stashpv ("Coro::State", TRUE); |
903 | |
901 | |
904 | newCONSTSUB (coro_state_stash, "SAVE_DEFAV", newSViv (TRANSFER_SAVE_DEFAV)); |
902 | newCONSTSUB (coro_state_stash, "SAVE_DEFAV", newSViv (TRANSFER_SAVE_DEFAV)); |
905 | newCONSTSUB (coro_state_stash, "SAVE_DEFSV", newSViv (TRANSFER_SAVE_DEFSV)); |
903 | newCONSTSUB (coro_state_stash, "SAVE_DEFSV", newSViv (TRANSFER_SAVE_DEFSV)); |
906 | newCONSTSUB (coro_state_stash, "SAVE_ERRSV", newSViv (TRANSFER_SAVE_ERRSV)); |
904 | newCONSTSUB (coro_state_stash, "SAVE_ERRSV", newSViv (TRANSFER_SAVE_ERRSV)); |
907 | newCONSTSUB (coro_state_stash, "SAVE_CURPM", newSViv (TRANSFER_SAVE_CURPM)); |
|
|
908 | newCONSTSUB (coro_state_stash, "SAVE_CCTXT", newSViv (TRANSFER_SAVE_CCTXT)); |
905 | newCONSTSUB (coro_state_stash, "SAVE_CCTXT", newSViv (TRANSFER_SAVE_CCTXT)); |
909 | |
906 | |
910 | if (!padlist_cache) |
907 | if (!padlist_cache) |
911 | padlist_cache = newHV (); |
908 | padlist_cache = newHV (); |
912 | |
909 | |