diff options
author | Malcolm Beattie <mbeattie@sable.ox.ac.uk> | 1997-09-09 15:04:26 +0000 |
---|---|---|
committer | Malcolm Beattie <mbeattie@sable.ox.ac.uk> | 1997-09-09 15:04:26 +0000 |
commit | 77a005ab9f9f951511e847aba59fbf2ab1bb17e3 (patch) | |
tree | 238d369e377ec323ac774f3e2fcdd6e61a4a3e7b /cv.h | |
parent | 1f5895a1c4980727163b32b39405e3fc770ace84 (diff) | |
download | perl-77a005ab9f9f951511e847aba59fbf2ab1bb17e3.tar.gz |
Rewrite synchronisation of subs/methods and add attrs
extension for specifying 'locked' and 'method' attributes.
p4raw-id: //depot/perl@56
Diffstat (limited to 'cv.h')
-rw-r--r-- | cv.h | 26 |
1 files changed, 17 insertions, 9 deletions
@@ -30,10 +30,9 @@ struct xpvcv { CV * xcv_outside; #ifdef USE_THREADS perl_mutex *xcv_mutexp; - perl_cond * xcv_condp; /* signalled when owner leaves CV */ struct thread *xcv_owner; /* current owner thread */ #endif /* USE_THREADS */ - U8 xcv_flags; + cv_flags_t xcv_flags; }; #define Nullcv Null(CV*) @@ -50,18 +49,19 @@ struct xpvcv { #define CvOUTSIDE(sv) ((XPVCV*)SvANY(sv))->xcv_outside #ifdef USE_THREADS #define CvMUTEXP(sv) ((XPVCV*)SvANY(sv))->xcv_mutexp -#define CvCONDP(sv) ((XPVCV*)SvANY(sv))->xcv_condp #define CvOWNER(sv) ((XPVCV*)SvANY(sv))->xcv_owner #endif /* USE_THREADS */ #define CvFLAGS(sv) ((XPVCV*)SvANY(sv))->xcv_flags -#define CVf_CLONE 0x01 /* anon CV uses external lexicals */ -#define CVf_CLONED 0x02 /* a clone of one of those */ -#define CVf_ANON 0x04 /* CvGV() can't be trusted */ -#define CVf_OLDSTYLE 0x08 -#define CVf_UNIQUE 0x10 /* can't be cloned */ -#define CVf_NODEBUG 0x20 /* no DB::sub indirection for this CV +#define CVf_CLONE 0x0001 /* anon CV uses external lexicals */ +#define CVf_CLONED 0x0002 /* a clone of one of those */ +#define CVf_ANON 0x0004 /* CvGV() can't be trusted */ +#define CVf_OLDSTYLE 0x0008 +#define CVf_UNIQUE 0x0010 /* can't be cloned */ +#define CVf_NODEBUG 0x0020 /* no DB::sub indirection for this CV (esp. useful for special XSUBs) */ +#define CVf_METHOD 0x0040 /* CV is explicitly marked as a method */ +#define CVf_LOCKED 0x0080 /* CV locks itself or first arg on entry */ #define CvCLONE(cv) (CvFLAGS(cv) & CVf_CLONE) #define CvCLONE_on(cv) (CvFLAGS(cv) |= CVf_CLONE) @@ -86,3 +86,11 @@ struct xpvcv { #define CvNODEBUG(cv) (CvFLAGS(cv) & CVf_NODEBUG) #define CvNODEBUG_on(cv) (CvFLAGS(cv) |= CVf_NODEBUG) #define CvNODEBUG_off(cv) (CvFLAGS(cv) &= ~CVf_NODEBUG) + +#define CvMETHOD(cv) (CvFLAGS(cv) & CVf_METHOD) +#define CvMETHOD_on(cv) (CvFLAGS(cv) |= CVf_METHOD) +#define CvMETHOD_off(cv) (CvFLAGS(cv) &= ~CVf_METHOD) + +#define CvLOCKED(cv) (CvFLAGS(cv) & CVf_LOCKED) +#define CvLOCKED_on(cv) (CvFLAGS(cv) |= CVf_LOCKED) +#define CvLOCKED_off(cv) (CvFLAGS(cv) &= ~CVf_LOCKED) |