ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro/State.xs
(Generate patch)

Comparing Coro/Coro/State.xs (file contents):
Revision 1.277 by root, Sat Nov 15 18:40:55 2008 UTC vs.
Revision 1.278 by root, Sun Nov 16 07:09:28 2008 UTC

1719 PL_runops = RUNOPS_DEFAULT; 1719 PL_runops = RUNOPS_DEFAULT;
1720 else 1720 else
1721 coro->slot->runops = RUNOPS_DEFAULT; 1721 coro->slot->runops = RUNOPS_DEFAULT;
1722 } 1722 }
1723} 1723}
1724
1725#if 0
1726static int
1727coro_gensub_free (pTHX_ SV *sv, MAGIC *mg)
1728{
1729 AV *padlist;
1730 AV *av = (AV *)mg->mg_obj;
1731
1732 abort ();
1733
1734 return 0;
1735}
1736
1737static MGVTBL coro_gensub_vtbl = {
1738 0, 0, 0, 0,
1739 coro_gensub_free
1740};
1741#endif
1742 1724
1743/*****************************************************************************/ 1725/*****************************************************************************/
1744/* PerlIO::cede */ 1726/* PerlIO::cede */
1745 1727
1746typedef struct 1728typedef struct
2064 2046
2065 frame->check = slf_check_semaphore_down; 2047 frame->check = slf_check_semaphore_down;
2066 2048
2067} 2049}
2068 2050
2051/*****************************************************************************/
2052
2053#define GENSUB_ARG CvXSUBANY (cv).any_ptr
2054
2055/* create a closure from XS, returns a code reference */
2056/* the arg can be accessed via GENSUB_ARG from the callback */
2057/* the callback must use dXSARGS/XSRETURN */
2058static SV *
2059gensub (pTHX_ void (*xsub)(pTHX_ CV *), void *arg)
2060{
2061 CV *cv = (CV *)NEWSV (0, 0);
2062
2063 sv_upgrade ((SV *)cv, SVt_PVCV);
2064
2065 CvANON_on (cv);
2066 CvISXSUB_on (cv);
2067 CvXSUB (cv) = xsub;
2068 GENSUB_ARG = arg;
2069
2070 return newRV_noinc ((SV *)cv);
2071}
2072
2073/*****************************************************************************/
2074
2069MODULE = Coro::State PACKAGE = Coro::State PREFIX = api_ 2075MODULE = Coro::State PACKAGE = Coro::State PREFIX = api_
2070 2076
2071PROTOTYPES: DISABLE 2077PROTOTYPES: DISABLE
2072 2078
2073BOOT: 2079BOOT:
2536 api_trace (aTHX_ coro_current, 0); 2542 api_trace (aTHX_ coro_current, 0);
2537 2543
2538 av_push (av_async_pool, newSVsv (coro_current)); 2544 av_push (av_async_pool, newSVsv (coro_current));
2539} 2545}
2540 2546
2541#if 0
2542
2543void
2544_generator_call (...)
2545 PROTOTYPE: @
2546 PPCODE:
2547 fprintf (stderr, "call %p\n", CvXSUBANY(cv).any_ptr);
2548 xxxx
2549 abort ();
2550
2551SV *
2552gensub (SV *sub, ...)
2553 PROTOTYPE: &;@
2554 CODE:
2555{
2556 struct coro *coro;
2557 MAGIC *mg;
2558 CV *xcv;
2559 CV *ncv = (CV *)newSV_type (SVt_PVCV);
2560 int i;
2561
2562 CvGV (ncv) = CvGV (cv);
2563 CvFILE (ncv) = CvFILE (cv);
2564
2565 Newz (0, coro, 1, struct coro);
2566 coro->args = newAV ();
2567 coro->flags = CF_NEW;
2568
2569 av_extend (coro->args, items - 1);
2570 for (i = 1; i < items; i++)
2571 av_push (coro->args, newSVsv (ST (i)));
2572
2573 CvISXSUB_on (ncv);
2574 CvXSUBANY (ncv).any_ptr = (void *)coro;
2575
2576 xcv = GvCV (gv_fetchpv ("Coro::_generator_call", 0, SVt_PVCV));
2577
2578 CvXSUB (ncv) = CvXSUB (xcv);
2579 CvANON_on (ncv);
2580
2581 mg = sv_magicext ((SV *)ncv, 0, CORO_MAGIC_type_state, &coro_gensub_vtbl, (char *)coro, 0);
2582 RETVAL = newRV_noinc ((SV *)ncv);
2583}
2584 OUTPUT:
2585 RETVAL
2586
2587#endif
2588
2589 2547
2590MODULE = Coro::State PACKAGE = Coro::AIO 2548MODULE = Coro::State PACKAGE = Coro::AIO
2591 2549
2592void 2550void
2593_get_state (SV *self) 2551_get_state (SV *self)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines