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.63 by root, Mon Mar 21 14:35:22 2005 UTC vs.
Revision 1.64 by root, Mon Mar 21 15:06:51 2005 UTC

1051 1051
1052void 1052void
1053yield(...) 1053yield(...)
1054 PROTOTYPE: @ 1054 PROTOTYPE: @
1055 CODE: 1055 CODE:
1056 static SV *returnstk; 1056 SV *yieldstack;
1057 SV *sv; 1057 SV *sv;
1058 AV *defav = GvAV (PL_defgv); 1058 AV *defav = GvAV (PL_defgv);
1059 struct coro *prev, *next; 1059 struct coro *prev, *next;
1060 1060
1061 if (!returnstk) 1061 yieldstack = *hv_fetch (
1062 returnstk = SvRV ((SV *)get_sv ("Coro::Cont::return", FALSE)); 1062 (HV *)SvRV (GvSV (coro_current)),
1063 "yieldstack", sizeof ("yieldstack") - 1,
1064 0
1065 );
1063 1066
1064 /* set up @_ -- ugly */ 1067 /* set up @_ -- ugly */
1065 av_clear (defav); 1068 av_clear (defav);
1066 av_fill (defav, items - 1); 1069 av_fill (defav, items - 1);
1067 while (items--) 1070 while (items--)
1068 av_store (defav, items, SvREFCNT_inc (ST(items))); 1071 av_store (defav, items, SvREFCNT_inc (ST(items)));
1069 1072
1070 SvGETMAGIC (returnstk); /* isn't documentation wrong for mg_get? */
1071 sv = av_pop ((AV *)SvRV (returnstk)); 1073 sv = av_pop ((AV *)SvRV (yieldstack));
1072 prev = (struct coro *)SvIV ((SV*)SvRV (*av_fetch ((AV *)SvRV (sv), 0, 0))); 1074 prev = (struct coro *)SvIV ((SV*)SvRV (*av_fetch ((AV *)SvRV (sv), 0, 0)));
1073 next = (struct coro *)SvIV ((SV*)SvRV (*av_fetch ((AV *)SvRV (sv), 1, 0))); 1075 next = (struct coro *)SvIV ((SV*)SvRV (*av_fetch ((AV *)SvRV (sv), 1, 0)));
1074 SvREFCNT_dec (sv); 1076 SvREFCNT_dec (sv);
1075 1077
1076 transfer (aTHX_ prev, next, 0); 1078 transfer (aTHX_ prev, next, 0);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines