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.82 by root, Mon Nov 20 22:26:16 2006 UTC vs.
Revision 1.83 by root, Mon Nov 20 22:32:44 2006 UTC

792 if (!SvOBJECT (sv) || SvSTASH (sv) != coro_state_stash) \ 792 if (!SvOBJECT (sv) || SvSTASH (sv) != coro_state_stash) \
793 croak ("%s() -- %s is not (and contains not) a Coro::State object", func, # sv); \ 793 croak ("%s() -- %s is not (and contains not) a Coro::State object", func, # sv); \
794 \ 794 \
795 } while(0) 795 } while(0)
796 796
797#define SvSTATE(sv) INT2PTR (struct coro *, SvIV (sv)) 797#define SvSTATE(sv) INT2PTR (struct coro *, SvIVX (sv))
798 798
799static void 799static void
800api_transfer(pTHX_ SV *prev, SV *next, int flags) 800api_transfer(pTHX_ SV *prev, SV *next, int flags)
801{ 801{
802 SV_CORO (prev, "Coro::transfer"); 802 SV_CORO (prev, "Coro::transfer");
814#define PRIO_IDLE -3 814#define PRIO_IDLE -3
815#define PRIO_MIN -4 815#define PRIO_MIN -4
816 816
817/* for Coro.pm */ 817/* for Coro.pm */
818static GV *coro_current, *coro_idle; 818static GV *coro_current, *coro_idle;
819static AV *coro_ready[PRIO_MAX-PRIO_MIN+1]; 819static AV *coro_ready [PRIO_MAX-PRIO_MIN+1];
820static int coro_nready; 820static int coro_nready;
821 821
822static void 822static void
823coro_enq (pTHX_ SV *sv) 823coro_enq (pTHX_ SV *sv)
824{ 824{
847 min_prio -= PRIO_MIN; 847 min_prio -= PRIO_MIN;
848 if (min_prio < 0) 848 if (min_prio < 0)
849 min_prio = 0; 849 min_prio = 0;
850 850
851 for (prio = PRIO_MAX - PRIO_MIN + 1; --prio >= min_prio; ) 851 for (prio = PRIO_MAX - PRIO_MIN + 1; --prio >= min_prio; )
852 if (AvFILLp (coro_ready[prio]) >= 0) 852 if (AvFILLp (coro_ready [prio]) >= 0)
853 { 853 {
854 coro_nready--; 854 coro_nready--;
855 return av_shift (coro_ready[prio]); 855 return av_shift (coro_ready [prio]);
856 } 856 }
857 857
858 return 0; 858 return 0;
859} 859}
860 860
1026 av_fill (defav, items - 1); 1026 av_fill (defav, items - 1);
1027 while (items--) 1027 while (items--)
1028 av_store (defav, items, SvREFCNT_inc (ST(items))); 1028 av_store (defav, items, SvREFCNT_inc (ST(items)));
1029 1029
1030 sv = av_pop ((AV *)SvRV (yieldstack)); 1030 sv = av_pop ((AV *)SvRV (yieldstack));
1031 prev = INT2PTR (struct coro *, SvIV ((SV*)SvRV (*av_fetch ((AV *)SvRV (sv), 0, 0)))); 1031 prev = SvSTATE ((SV*)SvRV (*av_fetch ((AV *)SvRV (sv), 0, 0)));
1032 next = INT2PTR (struct coro *, SvIV ((SV*)SvRV (*av_fetch ((AV *)SvRV (sv), 1, 0)))); 1032 next = SvSTATE ((SV*)SvRV (*av_fetch ((AV *)SvRV (sv), 1, 0)));
1033 SvREFCNT_dec (sv); 1033 SvREFCNT_dec (sv);
1034 1034
1035 transfer (aTHX_ prev, next, 0); 1035 transfer (aTHX_ prev, next, 0);
1036 1036
1037MODULE = Coro::State PACKAGE = Coro 1037MODULE = Coro::State PACKAGE = Coro

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines