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

Revision 10724, 4.2 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/*    gv.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
10struct gp {
11    SV *        gp_sv;          /* scalar value */
12    U32         gp_refcnt;      /* how many globs point to this? */
13    struct io * gp_io;          /* filehandle value */
14    CV *        gp_form;        /* format value */
15    AV *        gp_av;          /* array value */
16    HV *        gp_hv;          /* hash value */
17    GV *        gp_egv;         /* effective gv, if *glob */
18    CV *        gp_cv;          /* subroutine value */
19    U32         gp_cvgen;       /* generational validity of cached gv_cv */
20    I32         gp_lastexpr;    /* used by nothing_in_common() */
21    line_t      gp_line;        /* line first declared at (for -w) */
22    GV *        gp_filegv;      /* file first declared in (for -w) */
23};
24
25#if defined(CRIPPLED_CC) && (defined(iAPX286) || defined(M_I286) || defined(I80286))
26#define MICROPORT
27#endif
28
29#define GvXPVGV(gv)     ((XPVGV*)SvANY(gv))
30
31#define GvGP(gv)        (GvXPVGV(gv)->xgv_gp)
32#define GvNAME(gv)      (GvXPVGV(gv)->xgv_name)
33#define GvNAMELEN(gv)   (GvXPVGV(gv)->xgv_namelen)
34#define GvSTASH(gv)     (GvXPVGV(gv)->xgv_stash)
35#define GvFLAGS(gv)     (GvXPVGV(gv)->xgv_flags)
36
37#define GvSV(gv)        (GvGP(gv)->gp_sv)
38#define GvREFCNT(gv)    (GvGP(gv)->gp_refcnt)
39#define GvIO(gv)        ((gv) && SvTYPE((SV*)gv) == SVt_PVGV ? GvIOp(gv) : 0)
40#define GvIOp(gv)       (GvGP(gv)->gp_io)
41#define GvIOn(gv)       (GvIO(gv) ? GvIOp(gv) : GvIOp(gv_IOadd(gv)))
42
43#define GvFORM(gv)      (GvGP(gv)->gp_form)
44#define GvAV(gv)        (GvGP(gv)->gp_av)
45
46/* This macro is deprecated.  Do not use! */
47#define GvREFCNT_inc(gv) ((GV*)SvREFCNT_inc(gv))        /* DO NOT USE */
48
49#ifdef  MICROPORT       /* Microport 2.4 hack */
50AV *GvAVn();
51#else
52#define GvAVn(gv)       (GvGP(gv)->gp_av ? \
53                         GvGP(gv)->gp_av : \
54                         GvGP(gv_AVadd(gv))->gp_av)
55#endif
56#define GvHV(gv)        ((GvGP(gv))->gp_hv)
57
58#ifdef  MICROPORT       /* Microport 2.4 hack */
59HV *GvHVn();
60#else
61#define GvHVn(gv)       (GvGP(gv)->gp_hv ? \
62                         GvGP(gv)->gp_hv : \
63                         GvGP(gv_HVadd(gv))->gp_hv)
64#endif                  /* Microport 2.4 hack */
65
66#define GvCV(gv)        (GvGP(gv)->gp_cv)
67#define GvCVGEN(gv)     (GvGP(gv)->gp_cvgen)
68#define GvCVu(gv)       (GvGP(gv)->gp_cvgen ? Nullcv : GvGP(gv)->gp_cv)
69
70#define GvLASTEXPR(gv)  (GvGP(gv)->gp_lastexpr)
71
72#define GvLINE(gv)      (GvGP(gv)->gp_line)
73#define GvFILEGV(gv)    (GvGP(gv)->gp_filegv)
74
75#define GvEGV(gv)       (GvGP(gv)->gp_egv)
76#define GvENAME(gv)     GvNAME(GvEGV(gv) ? GvEGV(gv) : gv)
77#define GvESTASH(gv)    GvSTASH(GvEGV(gv) ? GvEGV(gv) : gv)
78
79#define GVf_INTRO       0x01
80#define GVf_MULTI       0x02
81#define GVf_ASSUMECV    0x04
82#define GVf_IMPORTED    0xF0
83#define GVf_IMPORTED_SV   0x10
84#define GVf_IMPORTED_AV   0x20
85#define GVf_IMPORTED_HV   0x40
86#define GVf_IMPORTED_CV   0x80
87
88#define GvINTRO(gv)             (GvFLAGS(gv) & GVf_INTRO)
89#define GvINTRO_on(gv)          (GvFLAGS(gv) |= GVf_INTRO)
90#define GvINTRO_off(gv)         (GvFLAGS(gv) &= ~GVf_INTRO)
91
92#define GvMULTI(gv)             (GvFLAGS(gv) & GVf_MULTI)
93#define GvMULTI_on(gv)          (GvFLAGS(gv) |= GVf_MULTI)
94#define GvMULTI_off(gv)         (GvFLAGS(gv) &= ~GVf_MULTI)
95
96#define GvASSUMECV(gv)          (GvFLAGS(gv) & GVf_ASSUMECV)
97#define GvASSUMECV_on(gv)       (GvFLAGS(gv) |= GVf_ASSUMECV)
98#define GvASSUMECV_off(gv)      (GvFLAGS(gv) &= ~GVf_ASSUMECV)
99
100#define GvIMPORTED(gv)          (GvFLAGS(gv) & GVf_IMPORTED)
101#define GvIMPORTED_on(gv)       (GvFLAGS(gv) |= GVf_IMPORTED)
102#define GvIMPORTED_off(gv)      (GvFLAGS(gv) &= ~GVf_IMPORTED)
103
104#define GvIMPORTED_SV(gv)       (GvFLAGS(gv) & GVf_IMPORTED_SV)
105#define GvIMPORTED_SV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_SV)
106#define GvIMPORTED_SV_off(gv)   (GvFLAGS(gv) &= ~GVf_IMPORTED_SV)
107
108#define GvIMPORTED_AV(gv)       (GvFLAGS(gv) & GVf_IMPORTED_AV)
109#define GvIMPORTED_AV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_AV)
110#define GvIMPORTED_AV_off(gv)   (GvFLAGS(gv) &= ~GVf_IMPORTED_AV)
111
112#define GvIMPORTED_HV(gv)       (GvFLAGS(gv) & GVf_IMPORTED_HV)
113#define GvIMPORTED_HV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_HV)
114#define GvIMPORTED_HV_off(gv)   (GvFLAGS(gv) &= ~GVf_IMPORTED_HV)
115
116#define GvIMPORTED_CV(gv)       (GvFLAGS(gv) & GVf_IMPORTED_CV)
117#define GvIMPORTED_CV_on(gv)    (GvFLAGS(gv) |= GVf_IMPORTED_CV)
118#define GvIMPORTED_CV_off(gv)   (GvFLAGS(gv) &= ~GVf_IMPORTED_CV)
119
120#define Nullgv Null(GV*)
121
122#define DM_UID   0x003
123#define DM_RUID   0x001
124#define DM_EUID   0x002
125#define DM_GID   0x030
126#define DM_RGID   0x010
127#define DM_EGID   0x020
128#define DM_DELAY 0x100
129
130#define GV_ADD          0x01
131#define GV_ADDMULTI     0x02
132#define GV_ADDWARN      0x04
Note: See TracBrowser for help on using the repository browser.