X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=cv.h;h=1b0fc7b612e24a4b689fac3438c5264967d1c60f;hb=daad78fc377a1f13c3b53f9a0c2196bdd763b063;hp=960e72735b32a1650f504b0f6de6e93249083fc6;hpb=e736a858356e87659136ef1f34af858e253efe45;p=p5sagit%2Fp5-mst-13.2.git diff --git a/cv.h b/cv.h index 960e727..1b0fc7b 100644 --- a/cv.h +++ b/cv.h @@ -1,7 +1,7 @@ /* cv.h * - * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, - * 2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others + * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, + * 2001, 2002, 2003, 2004, 2005, 2006, 2007, by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -11,7 +11,19 @@ /* This structure must the beginning of XPVFM in sv.h */ struct xpvcv { - NV xnv_nv; /* numeric value, if any */ + union { + NV xnv_nv; /* numeric value, if any */ + HV * xgv_stash; + struct { + U32 xlow; + U32 xhigh; + } xpad_cop_seq; /* used by pad.c for cop_sequence */ + struct { + U32 xbm_previous; /* how many characters in string before rare? */ + U8 xbm_flags; + U8 xbm_rare; /* rarest character in string */ + } xbm_s; /* fields from PVBM */ + } xnv_u; STRLEN xpv_cur; /* length of xp_pv as a C string */ STRLEN xpv_len; /* allocated size */ union { @@ -19,6 +31,7 @@ struct xpvcv { UV xivu_uv; void * xivu_p1; I32 xivu_i32; /* depth, >= 2 indicates recursive call */ + HEK * xivu_namehek; } xiv_u; union { MAGIC* xmg_magic; /* linked list of magicalness */ @@ -53,6 +66,7 @@ typedef struct { UV xivu_uv; void * xivu_p1; I32 xivu_i32; /* depth, >= 2 indicates recursive call */ + HEK * xivu_namehek; } xiv_u; union { MAGIC* xmg_magic; /* linked list of magicalness */ @@ -110,7 +124,8 @@ Returns the stash of the CV. #define CvFILEGV(sv) (gv_fetchfile(CvFILE(sv))) #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) # define CvDEPTH(sv) (*({const CV *_cv = (CV *)sv; \ - assert(SvTYPE(_cv) == SVt_PVCV); \ + assert(SvTYPE(_cv) == SVt_PVCV || \ + SvTYPE(_cv) == SVt_PVFM); \ &((XPVCV*)SvANY(_cv))->xiv_u.xivu_i32; \ })) #else @@ -124,23 +139,20 @@ Returns the stash of the CV. #define CVf_METHOD 0x0001 /* CV is explicitly marked as a method */ #define CVf_LOCKED 0x0002 /* CV locks itself or first arg on entry */ #define CVf_LVALUE 0x0004 /* CV return value can be used as lvalue */ -#define CVf_ASSERTION 0x0008 /* CV called only when asserting */ #define CVf_WEAKOUTSIDE 0x0010 /* CvOUTSIDE isn't ref counted */ #define CVf_CLONE 0x0020 /* anon CV uses external lexicals */ #define CVf_CLONED 0x0040 /* a clone of one of those */ #define CVf_ANON 0x0080 /* CvGV() can't be trusted */ #define CVf_UNIQUE 0x0100 /* sub is only called once (eg PL_main_cv, - * require, eval). Not to be confused - * with the GVf_UNIQUE flag associated - * with the :unique attribute */ + * require, eval). */ #define CVf_NODEBUG 0x0200 /* no DB::sub indirection for this CV (esp. useful for special XSUBs) */ #define CVf_CONST 0x0400 /* inlinable sub */ #define CVf_ISXSUB 0x0800 /* CV is an XSUB, not pure perl. */ /* This symbol for optimised communication between toke.c and op.c: */ -#define CVf_BUILTIN_ATTRS (CVf_METHOD|CVf_LOCKED|CVf_LVALUE|CVf_ASSERTION) +#define CVf_BUILTIN_ATTRS (CVf_METHOD|CVf_LOCKED|CVf_LVALUE) #define CvCLONE(cv) (CvFLAGS(cv) & CVf_CLONE) #define CvCLONE_on(cv) (CvFLAGS(cv) |= CVf_CLONE) @@ -174,15 +186,11 @@ Returns the stash of the CV. #define CvLVALUE_on(cv) (CvFLAGS(cv) |= CVf_LVALUE) #define CvLVALUE_off(cv) (CvFLAGS(cv) &= ~CVf_LVALUE) -#define CvASSERTION(cv) (CvFLAGS(cv) & CVf_ASSERTION) -#define CvASSERTION_on(cv) (CvFLAGS(cv) |= CVf_ASSERTION) -#define CvASSERTION_off(cv) (CvFLAGS(cv) &= ~CVf_ASSERTION) - #define CvEVAL(cv) (CvUNIQUE(cv) && !SvFAKE(cv)) #define CvEVAL_on(cv) (CvUNIQUE_on(cv),SvFAKE_off(cv)) #define CvEVAL_off(cv) CvUNIQUE_off(cv) -/* BEGIN|CHECK|INIT|END */ +/* BEGIN|CHECK|INIT|UNITCHECK|END */ #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)) @@ -199,6 +207,9 @@ Returns the stash of the CV. #define CvISXSUB_on(cv) (CvFLAGS(cv) |= CVf_ISXSUB) #define CvISXSUB_off(cv) (CvFLAGS(cv) &= ~CVf_ISXSUB) +/* Flags for newXS_flags */ +#define XS_DYNAMIC_FILENAME 0x01 /* The filename isn't static */ + /* =head1 CV reference counts and CvOUTSIDE