… | |
… | |
8 | # include <unistd.h> |
8 | # include <unistd.h> |
9 | # include <sys/mman.h> |
9 | # include <sys/mman.h> |
10 | #endif |
10 | #endif |
11 | |
11 | |
12 | #define MAY_FLUSH /* increases codesize */ |
12 | #define MAY_FLUSH /* increases codesize */ |
13 | |
|
|
14 | #define SUB_INIT "Coro::State::initialize" |
|
|
15 | |
13 | |
16 | #define TRANSFER_SAVE_DEFAV 0x00000001 |
14 | #define TRANSFER_SAVE_DEFAV 0x00000001 |
17 | #define TRANSFER_SAVE_DEFSV 0x00000002 |
15 | #define TRANSFER_SAVE_DEFSV 0x00000002 |
18 | #define TRANSFER_SAVE_ERRSV 0x00000004 |
16 | #define TRANSFER_SAVE_ERRSV 0x00000004 |
19 | #define TRANSFER_SAVE_CCTXT 0x00000008 |
17 | #define TRANSFER_SAVE_CCTXT 0x00000008 |
20 | |
18 | |
21 | #define TRANSFER_SAVE_ALL -1 |
19 | #define TRANSFER_SAVE_ALL -1 |
|
|
20 | |
|
|
21 | #define SUB_INIT "Coro::State::initialize" |
|
|
22 | #define UCORO_STATE "_coro_state" |
22 | |
23 | |
23 | struct coro { |
24 | struct coro { |
24 | /* the optional C context */ |
25 | /* the optional C context */ |
25 | coro_context cctx; |
26 | coro_context cctx; |
26 | void *sptr; |
27 | void *sptr; |
… | |
… | |
70 | typedef struct coro *Coro__State; |
71 | typedef struct coro *Coro__State; |
71 | typedef struct coro *Coro__State_or_hashref; |
72 | typedef struct coro *Coro__State_or_hashref; |
72 | |
73 | |
73 | static AV *main_mainstack; /* used to differentiate between $main and others */ |
74 | static AV *main_mainstack; /* used to differentiate between $main and others */ |
74 | static HV *coro_state_stash; |
75 | static HV *coro_state_stash; |
|
|
76 | static SV *ucoro_state_sv; |
|
|
77 | static U32 ucoro_state_hash; |
75 | static HV *padlist_cache; |
78 | static HV *padlist_cache; |
76 | |
79 | |
77 | /* mostly copied from op.c:cv_clone2 */ |
80 | /* mostly copied from op.c:cv_clone2 */ |
78 | STATIC AV * |
81 | STATIC AV * |
79 | clone_padlist (AV *protopadlist) |
82 | clone_padlist (AV *protopadlist) |
… | |
… | |
646 | |
649 | |
647 | PROTOTYPES: ENABLE |
650 | PROTOTYPES: ENABLE |
648 | |
651 | |
649 | BOOT: |
652 | BOOT: |
650 | { /* {} necessary for stoopid perl-5.6.x */ |
653 | { /* {} necessary for stoopid perl-5.6.x */ |
|
|
654 | ucoro_state_sv = newSVpv (UCORO_STATE, sizeof(UCORO_STATE) - 1); |
|
|
655 | PERL_HASH(ucoro_state_hash, UCORO_STATE, sizeof(UCORO_STATE) - 1); |
651 | coro_state_stash = gv_stashpvn ("Coro::State", 10, TRUE); |
656 | coro_state_stash = gv_stashpv ("Coro::State", TRUE); |
652 | |
657 | |
653 | newCONSTSUB (coro_state_stash, "SAVE_DEFAV", newSViv (TRANSFER_SAVE_DEFAV)); |
658 | newCONSTSUB (coro_state_stash, "SAVE_DEFAV", newSViv (TRANSFER_SAVE_DEFAV)); |
654 | newCONSTSUB (coro_state_stash, "SAVE_DEFSV", newSViv (TRANSFER_SAVE_DEFSV)); |
659 | newCONSTSUB (coro_state_stash, "SAVE_DEFSV", newSViv (TRANSFER_SAVE_DEFSV)); |
655 | newCONSTSUB (coro_state_stash, "SAVE_ERRSV", newSViv (TRANSFER_SAVE_ERRSV)); |
660 | newCONSTSUB (coro_state_stash, "SAVE_ERRSV", newSViv (TRANSFER_SAVE_ERRSV)); |
656 | newCONSTSUB (coro_state_stash, "SAVE_CCTXT", newSViv (TRANSFER_SAVE_CCTXT)); |
661 | newCONSTSUB (coro_state_stash, "SAVE_CCTXT", newSViv (TRANSFER_SAVE_CCTXT)); |