summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/CORE/cv.h
diff options
context:
space:
mode:
authorSiep Kroonenberg <siepo@cybercomm.nl>2011-02-17 12:20:49 +0000
committerSiep Kroonenberg <siepo@cybercomm.nl>2011-02-17 12:20:49 +0000
commit316ee97c621496b0fe3267f57cce81bee44ca1e6 (patch)
treecb2cab1192b4f58a7971af19b213e980bceda4b4 /Master/tlpkg/tlperl/lib/CORE/cv.h
parentcd0f87b5d39480d85ad9bd4ee37f520f75bed560 (diff)
Moving old tlperl prior to committing new one
git-svn-id: svn://tug.org/texlive/trunk@21422 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/tlperl/lib/CORE/cv.h')
-rwxr-xr-xMaster/tlpkg/tlperl/lib/CORE/cv.h275
1 files changed, 0 insertions, 275 deletions
diff --git a/Master/tlpkg/tlperl/lib/CORE/cv.h b/Master/tlpkg/tlperl/lib/CORE/cv.h
deleted file mode 100755
index 24f59023b0a..00000000000
--- a/Master/tlpkg/tlperl/lib/CORE/cv.h
+++ /dev/null
@@ -1,275 +0,0 @@
-/* cv.h
- *
- * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001,
- * 2002, 2003, 2004, 2005, 2006, 2007, 2008 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.
- *
- */
-
-/* This structure must the beginning of XPVFM in sv.h */
-
-struct xpvcv {
- 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 {
- IV xivu_iv;
- 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 */
- HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */
- } xmg_u;
- HV* xmg_stash; /* class package */
-
- HV * xcv_stash;
- union {
- OP * xcv_start;
- ANY xcv_xsubany;
- } xcv_start_u;
- union {
- OP * xcv_root;
- void (*xcv_xsub) (pTHX_ CV*);
- } xcv_root_u;
- GV * xcv_gv;
- char * xcv_file;
- PADLIST * xcv_padlist;
- CV * xcv_outside;
- U32 xcv_outside_seq; /* the COP sequence (at the point of our
- * compilation) in the lexically enclosing
- * sub */
- cv_flags_t xcv_flags;
-};
-
-typedef struct {
- STRLEN xpv_cur; /* length of xp_pv as a C string */
- STRLEN xpv_len; /* allocated size */
- union {
- IV xivu_iv;
- 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 */
- HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */
- } xmg_u;
- HV* xmg_stash; /* class package */
-
- HV * xcv_stash;
- union {
- OP * xcv_start;
- ANY xcv_xsubany;
- } xcv_start_u;
- union {
- OP * xcv_root;
- void (*xcv_xsub) (pTHX_ CV*);
- } xcv_root_u;
- GV * xcv_gv;
- char * xcv_file;
- PADLIST * xcv_padlist;
- CV * xcv_outside;
- U32 xcv_outside_seq; /* the COP sequence (at the point of our
- * compilation) in the lexically enclosing
- * sub */
- cv_flags_t xcv_flags;
-} xpvcv_allocated;
-
-/*
-=head1 Handy Values
-
-=for apidoc AmU||Nullcv
-Null CV pointer.
-
-=head1 CV Manipulation Functions
-
-=for apidoc Am|HV*|CvSTASH|CV* cv
-Returns the stash of the CV.
-
-=cut
-*/
-
-#define Nullcv Null(CV*)
-
-#define CvSTASH(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_stash
-#define CvSTART(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_start_u.xcv_start
-#define CvROOT(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_root_u.xcv_root
-#define CvXSUB(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_root_u.xcv_xsub
-#define CvXSUBANY(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_start_u.xcv_xsubany
-#define CvGV(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv
-#define CvFILE(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_file
-#ifdef USE_ITHREADS
-# define CvFILE_set_from_cop(sv, cop) (CvFILE(sv) = savepv(CopFILE(cop)))
-#else
-# define CvFILE_set_from_cop(sv, cop) (CvFILE(sv) = CopFILE(cop))
-#endif
-#define CvFILEGV(sv) (gv_fetchfile(CvFILE(sv)))
-#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
-# define CvDEPTH(sv) (*({const CV *const _cvdepth = (const CV *)sv; \
- assert(SvTYPE(_cvdepth) == SVt_PVCV); \
- &((XPVCV*)SvANY(_cvdepth))->xiv_u.xivu_i32; \
- }))
-#else
-# define CvDEPTH(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xiv_u.xivu_i32
-#endif
-#define CvPADLIST(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_padlist
-#define CvOUTSIDE(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_outside
-#define CvFLAGS(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_flags
-#define CvOUTSIDE_SEQ(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_outside_seq
-
-#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_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). */
-#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)
-
-#define CvCLONE(cv) (CvFLAGS(cv) & CVf_CLONE)
-#define CvCLONE_on(cv) (CvFLAGS(cv) |= CVf_CLONE)
-#define CvCLONE_off(cv) (CvFLAGS(cv) &= ~CVf_CLONE)
-
-#define CvCLONED(cv) (CvFLAGS(cv) & CVf_CLONED)
-#define CvCLONED_on(cv) (CvFLAGS(cv) |= CVf_CLONED)
-#define CvCLONED_off(cv) (CvFLAGS(cv) &= ~CVf_CLONED)
-
-#define CvANON(cv) (CvFLAGS(cv) & CVf_ANON)
-#define CvANON_on(cv) (CvFLAGS(cv) |= CVf_ANON)
-#define CvANON_off(cv) (CvFLAGS(cv) &= ~CVf_ANON)
-
-#define CvUNIQUE(cv) (CvFLAGS(cv) & CVf_UNIQUE)
-#define CvUNIQUE_on(cv) (CvFLAGS(cv) |= CVf_UNIQUE)
-#define CvUNIQUE_off(cv) (CvFLAGS(cv) &= ~CVf_UNIQUE)
-
-#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)
-
-#define CvLVALUE(cv) (CvFLAGS(cv) & CVf_LVALUE)
-#define CvLVALUE_on(cv) (CvFLAGS(cv) |= CVf_LVALUE)
-#define CvLVALUE_off(cv) (CvFLAGS(cv) &= ~CVf_LVALUE)
-
-#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|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))
-
-#define CvCONST(cv) (CvFLAGS(cv) & CVf_CONST)
-#define CvCONST_on(cv) (CvFLAGS(cv) |= CVf_CONST)
-#define CvCONST_off(cv) (CvFLAGS(cv) &= ~CVf_CONST)
-
-#define CvWEAKOUTSIDE(cv) (CvFLAGS(cv) & CVf_WEAKOUTSIDE)
-#define CvWEAKOUTSIDE_on(cv) (CvFLAGS(cv) |= CVf_WEAKOUTSIDE)
-#define CvWEAKOUTSIDE_off(cv) (CvFLAGS(cv) &= ~CVf_WEAKOUTSIDE)
-
-#define CvISXSUB(cv) (CvFLAGS(cv) & CVf_ISXSUB)
-#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
-
-=for apidoc m|bool|CvWEAKOUTSIDE|CV *cv
-
-Each CV has a pointer, C<CvOUTSIDE()>, to its lexically enclosing
-CV (if any). Because pointers to anonymous sub prototypes are
-stored in C<&> pad slots, it is a possible to get a circular reference,
-with the parent pointing to the child and vice-versa. To avoid the
-ensuing memory leak, we do not increment the reference count of the CV
-pointed to by C<CvOUTSIDE> in the I<one specific instance> that the parent
-has a C<&> pad slot pointing back to us. In this case, we set the
-C<CvWEAKOUTSIDE> flag in the child. This allows us to determine under what
-circumstances we should decrement the refcount of the parent when freeing
-the child.
-
-There is a further complication with non-closure anonymous subs (i.e. those
-that do not refer to any lexicals outside that sub). In this case, the
-anonymous prototype is shared rather than being cloned. This has the
-consequence that the parent may be freed while there are still active
-children, eg
-
- BEGIN { $a = sub { eval '$x' } }
-
-In this case, the BEGIN is freed immediately after execution since there
-are no active references to it: the anon sub prototype has
-C<CvWEAKOUTSIDE> set since it's not a closure, and $a points to the same
-CV, so it doesn't contribute to BEGIN's refcount either. When $a is
-executed, the C<eval '$x'> causes the chain of C<CvOUTSIDE>s to be followed,
-and the freed BEGIN is accessed.
-
-To avoid this, whenever a CV and its associated pad is freed, any
-C<&> entries in the pad are explicitly removed from the pad, and if the
-refcount of the pointed-to anon sub is still positive, then that
-child's C<CvOUTSIDE> is set to point to its grandparent. This will only
-occur in the single specific case of a non-closure anon prototype
-having one or more active references (such as C<$a> above).
-
-One other thing to consider is that a CV may be merely undefined
-rather than freed, eg C<undef &foo>. In this case, its refcount may
-not have reached zero, but we still delete its pad and its C<CvROOT> etc.
-Since various children may still have their C<CvOUTSIDE> pointing at this
-undefined CV, we keep its own C<CvOUTSIDE> for the time being, so that
-the chain of lexical scopes is unbroken. For example, the following
-should print 123:
-
- my $x = 123;
- sub tmp { sub { eval '$x' } }
- my $a = tmp();
- undef &tmp;
- print $a->();
-
-=cut
-*/
-
-/*
- * Local variables:
- * c-indentation-style: bsd
- * c-basic-offset: 4
- * indent-tabs-mode: t
- * End:
- *
- * ex: set ts=8 sts=4 sw=4 noet:
- */