… | |
… | |
1752 | |
1752 | |
1753 | SvRV_set (data, (SV *)av); |
1753 | SvRV_set (data, (SV *)av); |
1754 | api_ready (aTHX_ coro); |
1754 | api_ready (aTHX_ coro); |
1755 | SvREFCNT_dec (coro); |
1755 | SvREFCNT_dec (coro); |
1756 | |
1756 | |
|
|
1757 | /* better take a full copy of the arguments */ |
1757 | while (items--) |
1758 | while (items--) |
1758 | av_store (av, items, SvREFCNT_inc_NN (ST (items))); |
1759 | av_store (av, items, newSVsv (ST (items))); |
1759 | } |
1760 | } |
1760 | |
1761 | |
1761 | XSRETURN_EMPTY; |
1762 | XSRETURN_EMPTY; |
1762 | } |
1763 | } |
1763 | |
1764 | |
… | |
… | |
1778 | AV *av = (AV *)SvRV (data); |
1779 | AV *av = (AV *)SvRV (data); |
1779 | int i; |
1780 | int i; |
1780 | |
1781 | |
1781 | EXTEND (SP, AvFILLp (av) + 1); |
1782 | EXTEND (SP, AvFILLp (av) + 1); |
1782 | for (i = 0; i <= AvFILLp (av); ++i) |
1783 | for (i = 0; i <= AvFILLp (av); ++i) |
1783 | PUSHs (AvARRAY (av)[i]); |
1784 | PUSHs (sv_2mortal (AvARRAY (av)[i])); |
|
|
1785 | |
|
|
1786 | /* we have stolen the elements, so ste length to zero and free */ |
|
|
1787 | AvFILLp (av) = -1; |
|
|
1788 | av_undef (av); |
1784 | |
1789 | |
1785 | PUTBACK; |
1790 | PUTBACK; |
1786 | } |
1791 | } |
1787 | |
1792 | |
1788 | return 0; |
1793 | return 0; |
… | |
… | |
1828 | struct coro *coro = SvSTATE_hv (hv); |
1833 | struct coro *coro = SvSTATE_hv (hv); |
1829 | SV *data = newRV_inc ((SV *)hv); |
1834 | SV *data = newRV_inc ((SV *)hv); |
1830 | SV *cb = gensub (aTHX_ coro_rouse_callback, (void *)data); |
1835 | SV *cb = gensub (aTHX_ coro_rouse_callback, (void *)data); |
1831 | |
1836 | |
1832 | sv_magicext (SvRV (cb), data, CORO_MAGIC_type_rouse, 0, 0, 0); |
1837 | sv_magicext (SvRV (cb), data, CORO_MAGIC_type_rouse, 0, 0, 0); |
|
|
1838 | SvREFCNT_dec (data); /* magicext increases the refcount */ |
1833 | |
1839 | |
1834 | SvREFCNT_dec (coro->rouse_cb); |
1840 | SvREFCNT_dec (coro->rouse_cb); |
1835 | coro->rouse_cb = SvREFCNT_inc_NN (cb); |
1841 | coro->rouse_cb = SvREFCNT_inc_NN (cb); |
1836 | |
1842 | |
1837 | return cb; |
1843 | return cb; |
… | |
… | |
2137 | SV **ary; |
2143 | SV **ary; |
2138 | |
2144 | |
2139 | /* unfortunately, building manually saves memory */ |
2145 | /* unfortunately, building manually saves memory */ |
2140 | Newx (ary, 2, SV *); |
2146 | Newx (ary, 2, SV *); |
2141 | AvALLOC (av) = ary; |
2147 | AvALLOC (av) = ary; |
2142 | AvARRAY (av) = ary; |
2148 | SvPV_set ((SV *)av, (char *)ary); /* 5.8.8 needs this syntax instead of AvARRAY = ary */ |
2143 | AvMAX (av) = 1; |
2149 | AvMAX (av) = 1; |
2144 | AvFILLp (av) = 0; |
2150 | AvFILLp (av) = 0; |
2145 | ary [0] = newSViv (count); |
2151 | ary [0] = newSViv (count); |
2146 | |
2152 | |
2147 | return newRV_noinc ((SV *)av); |
2153 | return newRV_noinc ((SV *)av); |