perl 5.0 alpha 6
[p5sagit/p5-mst-13.2.git] / gv.h
CommitLineData
79072805 1/* $RCSfile: gv.h,v $$Revision: 4.1 $$Date: 92/08/07 18:26:42 $
2 *
3 * Copyright (c) 1991, 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 * $Log: gv.h,v $
9 * Revision 4.1 92/08/07 18:26:42 lwall
10 *
11 * Revision 4.0.1.3 92/06/08 15:33:44 lwall
12 * patch20: fixed confusion between a *var's real name and its effective name
13 * patch20: ($<,$>) = ... didn't work on some architectures
14 *
15 * Revision 4.0.1.2 91/11/05 18:36:15 lwall
16 * patch11: length($x) was sometimes wrong for numeric $x
17 *
18 * Revision 4.0.1.1 91/06/07 11:56:35 lwall
19 * patch4: new copyright notice
20 * patch4: length($`), length($&), length($') now optimized to avoid string copy
21 *
22 * Revision 4.0 91/03/20 01:39:49 lwall
23 * 4.0 baseline.
24 *
25 */
26
27struct gp {
28 SV * gp_sv; /* scalar value */
29 U32 gp_refcnt; /* how many globs point to this? */
30 struct io * gp_io; /* filehandle value */
31 CV * gp_form; /* format value */
32 AV * gp_av; /* array value */
33 HV * gp_hv; /* associative array value */
34 GV * gp_egv; /* effective gv, if *glob */
35 CV * gp_cv; /* subroutine value */
463ee0b2 36 U32 gp_cvgen; /* generational validity of cached gv_cv */
79072805 37 I32 gp_lastexpr; /* used by nothing_in_common() */
38 line_t gp_line; /* line first declared at (for -w) */
8990e307 39 GV * gp_filegv; /* file first declared in (for -w) */
79072805 40 char gp_flags;
41};
42
43#if defined(CRIPPLED_CC) && (defined(iAPX286) || defined(M_I286) || defined(I80286))
44#define MICROPORT
45#endif
46
47#define GvXPVGV(gv) ((XPVGV*)SvANY(gv))
48
49#define GvMAGIC(gv) (GvGP(gv)->gp_magic)
50#define GvSV(gv) (GvGP(gv)->gp_sv)
51#define GvREFCNT(gv) (GvGP(gv)->gp_refcnt)
52#define GvIO(gv) (GvGP(gv)->gp_io)
53#define GvIOn(gv) (GvIO(gv) ? \
54 GvIO(gv) : \
55 (GvIO(gv) = newIO()))
56
57#define GvFORM(gv) (GvGP(gv)->gp_form)
58#define GvAV(gv) (GvGP(gv)->gp_av)
59
60#ifdef MICROPORT /* Microport 2.4 hack */
61AV *GvAVn();
62#else
63#define GvAVn(gv) (GvGP(gv)->gp_av ? \
64 GvGP(gv)->gp_av : \
65 GvGP(gv_AVadd(gv))->gp_av)
66#endif
67#define GvHV(gv) ((GvGP(gv))->gp_hv)
68
69#ifdef MICROPORT /* Microport 2.4 hack */
70HV *GvHVn();
71#else
72#define GvHVn(gv) (GvGP(gv)->gp_hv ? \
73 GvGP(gv)->gp_hv : \
74 GvGP(gv_HVadd(gv))->gp_hv)
75#endif /* Microport 2.4 hack */
76
77#define GvCV(gv) (GvGP(gv)->gp_cv)
463ee0b2 78#define GvCVGEN(gv) (GvGP(gv)->gp_cvgen)
79072805 79
80#define GvLASTEXPR(gv) (GvGP(gv)->gp_lastexpr)
81
82#define GvLINE(gv) (GvGP(gv)->gp_line)
8990e307 83#define GvFILEGV(gv) (GvGP(gv)->gp_filegv)
79072805 84
85#define GvFLAGS(gv) (GvGP(gv)->gp_flags)
86
87#define GvEGV(gv) (GvGP(gv)->gp_egv)
88
89#define GvGP(gv) (GvXPVGV(gv)->xgv_gp)
90#define GvNAME(gv) (GvXPVGV(gv)->xgv_name)
91#define GvNAMELEN(gv) (GvXPVGV(gv)->xgv_namelen)
92#define GvENAME(gv) GvNAME(GvEGV(gv))
93
94#define GvSTASH(gv) (GvXPVGV(gv)->xgv_stash)
95#define GvESTASH(gv) GvSTASH(GvEGV(gv))
96
79072805 97#define Nullgv Null(GV*)
98
99#define DM_UID 0x003
100#define DM_RUID 0x001
101#define DM_EUID 0x002
102#define DM_GID 0x030
103#define DM_RGID 0x010
104#define DM_EGID 0x020
105#define DM_DELAY 0x100
106