… | |
… | |
839 | if (!SvOBJECT (sv) || SvSTASH (sv) != coro_state_stash) \ |
839 | if (!SvOBJECT (sv) || SvSTASH (sv) != coro_state_stash) \ |
840 | croak ("%s() -- %s is not (and contains not) a Coro::State object", func, # sv); \ |
840 | croak ("%s() -- %s is not (and contains not) a Coro::State object", func, # sv); \ |
841 | \ |
841 | \ |
842 | } while(0) |
842 | } while(0) |
843 | |
843 | |
844 | #define SvSTATE(sv) (struct coro *)SvIV (sv) |
844 | #define SvSTATE(sv) INT2PTR (struct coro *, SvIV (sv)) |
845 | |
845 | |
846 | static void |
846 | static void |
847 | api_transfer(pTHX_ SV *prev, SV *next, int flags) |
847 | api_transfer(pTHX_ SV *prev, SV *next, int flags) |
848 | { |
848 | { |
849 | SV_CORO (prev, "Coro::transfer"); |
849 | SV_CORO (prev, "Coro::transfer"); |
… | |
… | |
1080 | av_fill (defav, items - 1); |
1080 | av_fill (defav, items - 1); |
1081 | while (items--) |
1081 | while (items--) |
1082 | av_store (defav, items, SvREFCNT_inc (ST(items))); |
1082 | av_store (defav, items, SvREFCNT_inc (ST(items))); |
1083 | |
1083 | |
1084 | sv = av_pop ((AV *)SvRV (yieldstack)); |
1084 | sv = av_pop ((AV *)SvRV (yieldstack)); |
1085 | prev = (struct coro *)SvIV ((SV*)SvRV (*av_fetch ((AV *)SvRV (sv), 0, 0))); |
1085 | prev = INT2PTR (struct coro *, SvIV ((SV*)SvRV (*av_fetch ((AV *)SvRV (sv), 0, 0)))); |
1086 | next = (struct coro *)SvIV ((SV*)SvRV (*av_fetch ((AV *)SvRV (sv), 1, 0))); |
1086 | next = INT2PTR (struct coro *, SvIV ((SV*)SvRV (*av_fetch ((AV *)SvRV (sv), 1, 0)))); |
1087 | SvREFCNT_dec (sv); |
1087 | SvREFCNT_dec (sv); |
1088 | |
1088 | |
1089 | transfer (aTHX_ prev, next, 0); |
1089 | transfer (aTHX_ prev, next, 0); |
1090 | |
1090 | |
1091 | MODULE = Coro::State PACKAGE = Coro |
1091 | MODULE = Coro::State PACKAGE = Coro |