… | |
… | |
1623 | else |
1623 | else |
1624 | coro->slot->runops = RUNOPS_DEFAULT; |
1624 | coro->slot->runops = RUNOPS_DEFAULT; |
1625 | } |
1625 | } |
1626 | } |
1626 | } |
1627 | |
1627 | |
|
|
1628 | static int |
|
|
1629 | coro_gensub_free (pTHX_ SV *sv, MAGIC *mg) |
|
|
1630 | { |
|
|
1631 | AV *padlist; |
|
|
1632 | AV *av = (AV *)mg->mg_obj; |
|
|
1633 | |
|
|
1634 | abort (); |
|
|
1635 | |
|
|
1636 | return 0; |
|
|
1637 | } |
|
|
1638 | |
|
|
1639 | static MGVTBL coro_gensub_vtbl = { |
|
|
1640 | 0, 0, 0, 0, |
|
|
1641 | coro_gensub_free |
|
|
1642 | }; |
|
|
1643 | |
1628 | MODULE = Coro::State PACKAGE = Coro::State PREFIX = api_ |
1644 | MODULE = Coro::State PACKAGE = Coro::State PREFIX = api_ |
1629 | |
1645 | |
1630 | PROTOTYPES: DISABLE |
1646 | PROTOTYPES: DISABLE |
1631 | |
1647 | |
1632 | BOOT: |
1648 | BOOT: |
… | |
… | |
2083 | api_trace (coro_current, 0); |
2099 | api_trace (coro_current, 0); |
2084 | |
2100 | |
2085 | av_push (av_async_pool, newSVsv (coro_current)); |
2101 | av_push (av_async_pool, newSVsv (coro_current)); |
2086 | } |
2102 | } |
2087 | |
2103 | |
|
|
2104 | #if 0 |
|
|
2105 | |
|
|
2106 | void |
|
|
2107 | _generator_call (...) |
|
|
2108 | PROTOTYPE: @ |
|
|
2109 | PPCODE: |
|
|
2110 | fprintf (stderr, "call %p\n", CvXSUBANY(cv).any_ptr); |
|
|
2111 | xxxx |
|
|
2112 | abort (); |
|
|
2113 | |
|
|
2114 | SV * |
|
|
2115 | gensub (SV *sub, ...) |
|
|
2116 | PROTOTYPE: &;@ |
|
|
2117 | CODE: |
|
|
2118 | { |
|
|
2119 | struct coro *coro; |
|
|
2120 | MAGIC *mg; |
|
|
2121 | CV *xcv; |
|
|
2122 | CV *ncv = (CV *)newSV_type (SVt_PVCV); |
|
|
2123 | int i; |
|
|
2124 | |
|
|
2125 | CvGV (ncv) = CvGV (cv); |
|
|
2126 | CvFILE (ncv) = CvFILE (cv); |
|
|
2127 | |
|
|
2128 | Newz (0, coro, 1, struct coro); |
|
|
2129 | coro->args = newAV (); |
|
|
2130 | coro->flags = CF_NEW; |
|
|
2131 | |
|
|
2132 | av_extend (coro->args, items - 1); |
|
|
2133 | for (i = 1; i < items; i++) |
|
|
2134 | av_push (coro->args, newSVsv (ST (i))); |
|
|
2135 | |
|
|
2136 | CvISXSUB_on (ncv); |
|
|
2137 | CvXSUBANY (ncv).any_ptr = (void *)coro; |
|
|
2138 | |
|
|
2139 | xcv = GvCV (gv_fetchpv ("Coro::_generator_call", 0, SVt_PVCV)); |
|
|
2140 | |
|
|
2141 | CvXSUB (ncv) = CvXSUB (xcv); |
|
|
2142 | CvANON_on (ncv); |
|
|
2143 | |
|
|
2144 | mg = sv_magicext ((SV *)ncv, 0, CORO_MAGIC_type_state, &coro_gensub_vtbl, (char *)coro, 0); |
|
|
2145 | RETVAL = newRV_noinc ((SV *)ncv); |
|
|
2146 | } |
|
|
2147 | OUTPUT: |
|
|
2148 | RETVAL |
|
|
2149 | |
|
|
2150 | #endif |
|
|
2151 | |
2088 | |
2152 | |
2089 | MODULE = Coro::State PACKAGE = Coro::AIO |
2153 | MODULE = Coro::State PACKAGE = Coro::AIO |
2090 | |
2154 | |
2091 | SV * |
2155 | SV * |
2092 | _get_state () |
2156 | _get_state () |