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.345 by root, Wed Dec 17 04:57:07 2008 UTC vs.
Revision 1.346 by root, Tue Jun 9 18:56:45 2009 UTC

1988 SV *data = (SV *)GENSUB_ARG; 1988 SV *data = (SV *)GENSUB_ARG;
1989 1989
1990 if (SvTYPE (SvRV (data)) != SVt_PVAV) 1990 if (SvTYPE (SvRV (data)) != SVt_PVAV)
1991 { 1991 {
1992 /* first call, set args */ 1992 /* first call, set args */
1993 SV *coro = SvRV (data);
1993 AV *av = newAV (); 1994 AV *av = newAV ();
1994 SV *coro = SvRV (data);
1995 1995
1996 SvRV_set (data, (SV *)av); 1996 SvRV_set (data, (SV *)av);
1997 api_ready (aTHX_ coro);
1998 SvREFCNT_dec (coro);
1999 1997
2000 /* better take a full copy of the arguments */ 1998 /* better take a full copy of the arguments */
2001 while (items--) 1999 while (items--)
2002 av_store (av, items, newSVsv (ST (items))); 2000 av_store (av, items, newSVsv (ST (items)));
2001
2002 api_ready (aTHX_ coro);
2003 SvREFCNT_dec (coro);
2003 } 2004 }
2004 2005
2005 XSRETURN_EMPTY; 2006 XSRETURN_EMPTY;
2006} 2007}
2007 2008
2024 2025
2025 EXTEND (SP, AvFILLp (av) + 1); 2026 EXTEND (SP, AvFILLp (av) + 1);
2026 for (i = 0; i <= AvFILLp (av); ++i) 2027 for (i = 0; i <= AvFILLp (av); ++i)
2027 PUSHs (sv_2mortal (AvARRAY (av)[i])); 2028 PUSHs (sv_2mortal (AvARRAY (av)[i]));
2028 2029
2029 /* we have stolen the elements, so ste length to zero and free */ 2030 /* we have stolen the elements, so set length to zero and free */
2030 AvFILLp (av) = -1; 2031 AvFILLp (av) = -1;
2031 av_undef (av); 2032 av_undef (av);
2032 2033
2033 PUTBACK; 2034 PUTBACK;
2034 } 2035 }
3430 av_push (*avp, SvREFCNT_inc (block)); 3431 av_push (*avp, SvREFCNT_inc (block));
3431 3432
3432 if (!ix) 3433 if (!ix)
3433 on_enterleave_call (aTHX_ block); 3434 on_enterleave_call (aTHX_ block);
3434 3435
3435 LEAVE; /* pp_entersub unfortunately forces an ENTER/LEAVE around xs calls */ 3436 LEAVE; /* pp_entersub unfortunately forces an ENTER/LEAVE around XS calls */
3436 SAVEDESTRUCTOR_X (ix ? coro_pop_on_leave : coro_pop_on_enter, (void *)coro); 3437 SAVEDESTRUCTOR_X (ix ? coro_pop_on_leave : coro_pop_on_enter, (void *)coro);
3437 ENTER; /* pp_entersub unfortunately forces an ENTER/LEAVE around xs calls */ 3438 ENTER; /* pp_entersub unfortunately forces an ENTER/LEAVE around XS calls */
3438} 3439}
3439 3440
3440 3441
3441MODULE = Coro::State PACKAGE = PerlIO::cede 3442MODULE = Coro::State PACKAGE = PerlIO::cede
3442 3443

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines