X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=cv.h;h=6fa1f4fe8d69a663ff6b0eba09b03c0ee876ceb2;hb=60aeb6fd4ca923078be883926562d30b13279552;hp=67d4a8ef6eef742e4b2068afa4a68fc269098b5c;hpb=cd06dffe59d60ee6a2fdd7c81f8cef42c7026b36;p=p5sagit%2Fp5-mst-13.2.git diff --git a/cv.h b/cv.h index 67d4a8e..6fa1f4f 100644 --- a/cv.h +++ b/cv.h @@ -1,13 +1,14 @@ /* cv.h * - * Copyright (c) 1991-1999, Larry Wall + * Copyright (c) 1991-2000, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. * */ -/* This structure much match the beginning of XPVFM */ +/* This structure much match XPVCV in B/C.pm and the beginning of XPVFM + * in sv.h */ struct xpvcv { char * xpv_pv; /* pointer to malloced string */ @@ -24,8 +25,8 @@ struct xpvcv { void (*xcv_xsub) (pTHXo_ CV*); ANY xcv_xsubany; GV * xcv_gv; - GV * xcv_filegv; - long xcv_depth; /* >= 2 indicates recursive call */ + char * xcv_file; + long xcv_depth; /* >= 2 indicates recursive call */ AV * xcv_padlist; CV * xcv_outside; #ifdef USE_THREADS @@ -35,6 +36,16 @@ struct xpvcv { cv_flags_t xcv_flags; }; +/* +=for apidoc AmU||Nullcv +Null CV pointer. + +=for apidoc Am|HV*|CvSTASH|CV* cv +Returns the stash of the CV. + +=cut +*/ + #define Nullcv Null(CV*) #define CvSTASH(sv) ((XPVCV*)SvANY(sv))->xcv_stash @@ -43,7 +54,8 @@ struct xpvcv { #define CvXSUB(sv) ((XPVCV*)SvANY(sv))->xcv_xsub #define CvXSUBANY(sv) ((XPVCV*)SvANY(sv))->xcv_xsubany #define CvGV(sv) ((XPVCV*)SvANY(sv))->xcv_gv -#define CvFILEGV(sv) ((XPVCV*)SvANY(sv))->xcv_filegv +#define CvFILE(sv) ((XPVCV*)SvANY(sv))->xcv_file +#define CvFILEGV(sv) (gv_fetchfile(CvFILE(sv)) #define CvDEPTH(sv) ((XPVCV*)SvANY(sv))->xcv_depth #define CvPADLIST(sv) ((XPVCV*)SvANY(sv))->xcv_padlist #define CvOUTSIDE(sv) ((XPVCV*)SvANY(sv))->xcv_outside @@ -63,6 +75,7 @@ struct xpvcv { #define CVf_METHOD 0x0040 /* CV is explicitly marked as a method */ #define CVf_LOCKED 0x0080 /* CV locks itself or first arg on entry */ #define CVf_LVALUE 0x0100 /* CV return value can be used as lvalue */ +#define CVf_CONST 0x0200 /* inlinable sub */ #define CvCLONE(cv) (CvFLAGS(cv) & CVf_CLONE) #define CvCLONE_on(cv) (CvFLAGS(cv) |= CVf_CLONE) @@ -110,3 +123,7 @@ struct xpvcv { #define CvSPECIAL(cv) (CvUNIQUE(cv) && SvFAKE(cv)) #define CvSPECIAL_on(cv) (CvUNIQUE_on(cv),SvFAKE_on(cv)) #define CvSPECIAL_off(cv) (CvUNIQUE_off(cv),SvFAKE_off(cv)) + +#define CvCONST(cv) (CvFLAGS(cv) & CVf_CONST) +#define CvCONST_on(cv) (CvFLAGS(cv) |= CVf_CONST) +#define CvCONST_off(cv) (CvFLAGS(cv) &= ~CVf_CONST)