source: trunk/third/perl/cv.h @ 10724

Revision 10724, 2.7 KB checked in by ghudson, 27 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r10723, which included commits to RCS files with non-trunk default branches.
Line 
1/*    cv.h
2 *
3 *    Copyright (c) 1991-1997, Larry Wall
4 *
5 *    You may distribute under the terms of either the GNU General Public
6 *    License or the Artistic License, as specified in the README file.
7 *
8 */
9
10/* This structure much match the beginning of XPVFM */
11
12struct xpvcv {
13    char *      xpv_pv;         /* pointer to malloced string */
14    STRLEN      xpv_cur;        /* length of xp_pv as a C string */
15    STRLEN      xpv_len;        /* allocated size */
16    IV          xof_off;        /* integer value */
17    double      xnv_nv;         /* numeric value, if any */
18    MAGIC*      xmg_magic;      /* magic for scalar array */
19    HV*         xmg_stash;      /* class package */
20
21    HV *        xcv_stash;
22    OP *        xcv_start;
23    OP *        xcv_root;
24    void      (*xcv_xsub) _((CV*));
25    ANY         xcv_xsubany;
26    GV *        xcv_gv;
27    GV *        xcv_filegv;
28    long        xcv_depth;              /* >= 2 indicates recursive call */
29    AV *        xcv_padlist;
30    CV *        xcv_outside;
31    U8          xcv_flags;
32};
33
34#define Nullcv Null(CV*)
35
36#define CvSTASH(sv)     ((XPVCV*)SvANY(sv))->xcv_stash
37#define CvSTART(sv)     ((XPVCV*)SvANY(sv))->xcv_start
38#define CvROOT(sv)      ((XPVCV*)SvANY(sv))->xcv_root
39#define CvXSUB(sv)      ((XPVCV*)SvANY(sv))->xcv_xsub
40#define CvXSUBANY(sv)   ((XPVCV*)SvANY(sv))->xcv_xsubany
41#define CvGV(sv)        ((XPVCV*)SvANY(sv))->xcv_gv
42#define CvFILEGV(sv)    ((XPVCV*)SvANY(sv))->xcv_filegv
43#define CvDEPTH(sv)     ((XPVCV*)SvANY(sv))->xcv_depth
44#define CvPADLIST(sv)   ((XPVCV*)SvANY(sv))->xcv_padlist
45#define CvOUTSIDE(sv)   ((XPVCV*)SvANY(sv))->xcv_outside
46#define CvFLAGS(sv)     ((XPVCV*)SvANY(sv))->xcv_flags
47
48#define CVf_CLONE       0x01    /* anon CV uses external lexicals */
49#define CVf_CLONED      0x02    /* a clone of one of those */
50#define CVf_ANON        0x04    /* CvGV() can't be trusted */
51#define CVf_OLDSTYLE    0x08
52#define CVf_UNIQUE      0x10    /* can't be cloned */
53#define CVf_NODEBUG     0x20    /* no DB::sub indirection for this CV
54                                   (esp. useful for special XSUBs) */
55
56#define CvCLONE(cv)             (CvFLAGS(cv) & CVf_CLONE)
57#define CvCLONE_on(cv)          (CvFLAGS(cv) |= CVf_CLONE)
58#define CvCLONE_off(cv)         (CvFLAGS(cv) &= ~CVf_CLONE)
59
60#define CvCLONED(cv)            (CvFLAGS(cv) & CVf_CLONED)
61#define CvCLONED_on(cv)         (CvFLAGS(cv) |= CVf_CLONED)
62#define CvCLONED_off(cv)        (CvFLAGS(cv) &= ~CVf_CLONED)
63
64#define CvANON(cv)              (CvFLAGS(cv) & CVf_ANON)
65#define CvANON_on(cv)           (CvFLAGS(cv) |= CVf_ANON)
66#define CvANON_off(cv)          (CvFLAGS(cv) &= ~CVf_ANON)
67
68#define CvOLDSTYLE(cv)          (CvFLAGS(cv) & CVf_OLDSTYLE)
69#define CvOLDSTYLE_on(cv)       (CvFLAGS(cv) |= CVf_OLDSTYLE)
70#define CvOLDSTYLE_off(cv)      (CvFLAGS(cv) &= ~CVf_OLDSTYLE)
71
72#define CvUNIQUE(cv)            (CvFLAGS(cv) & CVf_UNIQUE)
73#define CvUNIQUE_on(cv)         (CvFLAGS(cv) |= CVf_UNIQUE)
74#define CvUNIQUE_off(cv)        (CvFLAGS(cv) &= ~CVf_UNIQUE)
75
76#define CvNODEBUG(cv)           (CvFLAGS(cv) & CVf_NODEBUG)
77#define CvNODEBUG_on(cv)        (CvFLAGS(cv) |= CVf_NODEBUG)
78#define CvNODEBUG_off(cv)       (CvFLAGS(cv) &= ~CVf_NODEBUG)
Note: See TracBrowser for help on using the repository browser.