summaryrefslogtreecommitdiff
path: root/cv.h
diff options
context:
space:
mode:
authorMalcolm Beattie <mbeattie@sable.ox.ac.uk>1997-09-09 15:04:26 +0000
committerMalcolm Beattie <mbeattie@sable.ox.ac.uk>1997-09-09 15:04:26 +0000
commit77a005ab9f9f951511e847aba59fbf2ab1bb17e3 (patch)
tree238d369e377ec323ac774f3e2fcdd6e61a4a3e7b /cv.h
parent1f5895a1c4980727163b32b39405e3fc770ace84 (diff)
downloadperl-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.h26
1 files changed, 17 insertions, 9 deletions
diff --git a/cv.h b/cv.h
index 1e6b8de77a..d5ffdc2196 100644
--- a/cv.h
+++ b/cv.h
@@ -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)