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.320 by root, Fri Nov 21 07:29:04 2008 UTC vs.
Revision 1.321 by root, Sat Nov 22 02:09:54 2008 UTC

1#define CORO_CLONE 1 //D
2
1#include "libcoro/coro.c" 3#include "libcoro/coro.c"
2 4
3#define PERL_NO_GET_CONTEXT 5#define PERL_NO_GET_CONTEXT
4#define PERL_EXT 6#define PERL_EXT
5 7
101# define CvISXSUB_on(cv) (void)cv 103# define CvISXSUB_on(cv) (void)cv
102#endif 104#endif
103#ifndef CvISXSUB 105#ifndef CvISXSUB
104# define CvISXSUB(cv) (CvXSUB (cv) ? TRUE : FALSE) 106# define CvISXSUB(cv) (CvXSUB (cv) ? TRUE : FALSE)
105#endif 107#endif
108#ifndef Newx
109# define Newx(ptr,nitems,type) New (0,ptr,nitems,type)
110#endif
106 111
107/* 5.8.7 */ 112/* 5.8.7 */
108#ifndef SvRV_set 113#ifndef SvRV_set
109# define SvRV_set(s,v) SvRV(s) = (v) 114# define SvRV_set(s,v) SvRV(s) = (v)
110#endif 115#endif
347 GV *gvp; 352 GV *gvp;
348 return sv_2cv (sv, &st, &gvp, 0); 353 return sv_2cv (sv, &st, &gvp, 0);
349} 354}
350 355
351static AV * 356static AV *
352coro_clone_padlist (pTHX_ CV *cv) 357coro_derive_padlist (pTHX_ CV *cv)
353{ 358{
354 AV *padlist = CvPADLIST (cv); 359 AV *padlist = CvPADLIST (cv);
355 AV *newpadlist, *newpad; 360 AV *newpadlist, *newpad;
356 361
357 newpadlist = newAV (); 362 newpadlist = newAV ();
477 CV *cp = Perl_cv_clone (aTHX_ cv); 482 CV *cp = Perl_cv_clone (aTHX_ cv);
478 CvPADLIST (cv) = CvPADLIST (cp); 483 CvPADLIST (cv) = CvPADLIST (cp);
479 CvPADLIST (cp) = 0; 484 CvPADLIST (cp) = 0;
480 SvREFCNT_dec (cp); 485 SvREFCNT_dec (cp);
481#else 486#else
482 CvPADLIST (cv) = coro_clone_padlist (aTHX_ cv); 487 CvPADLIST (cv) = coro_derive_padlist (aTHX_ cv);
483#endif 488#endif
484 } 489 }
485} 490}
486 491
487static void 492static void
2724 XSRETURN_EMPTY; 2729 XSRETURN_EMPTY;
2725} 2730}
2726 2731
2727/*****************************************************************************/ 2732/*****************************************************************************/
2728 2733
2734#if CORO_CLONE
2735# include "clone.c"
2736#endif
2737
2729MODULE = Coro::State PACKAGE = Coro::State PREFIX = api_ 2738MODULE = Coro::State PACKAGE = Coro::State PREFIX = api_
2730 2739
2731PROTOTYPES: DISABLE 2740PROTOTYPES: DISABLE
2732 2741
2733BOOT: 2742BOOT:
2871void 2880void
2872_exit (int code) 2881_exit (int code)
2873 PROTOTYPE: $ 2882 PROTOTYPE: $
2874 CODE: 2883 CODE:
2875 _exit (code); 2884 _exit (code);
2885
2886#if CORO_CLONE
2887
2888SV *
2889clone (Coro::State coro)
2890 CODE:
2891{
2892 struct coro *ncoro = coro_clone (coro);
2893 MAGIC *mg;
2894 /* TODO: too much duplication */
2895 ncoro->hv = newHV ();
2896 mg = sv_magicext ((SV *)ncoro->hv, 0, CORO_MAGIC_type_state, &coro_state_vtbl, (char *)ncoro, 0);
2897 mg->mg_flags |= MGf_DUP;
2898 RETVAL = sv_bless (newRV_noinc ((SV *)ncoro->hv), SvSTASH (coro->hv));
2899}
2900 OUTPUT:
2901 RETVAL
2902
2903#endif
2876 2904
2877int 2905int
2878cctx_stacksize (int new_stacksize = 0) 2906cctx_stacksize (int new_stacksize = 0)
2879 PROTOTYPE: ;$ 2907 PROTOTYPE: ;$
2880 CODE: 2908 CODE:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines