perl 5.0 alpha 4
[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) */
39 char gp_flags;
40};
41
42#if defined(CRIPPLED_CC) && (defined(iAPX286) || defined(M_I286) || defined(I80286))
43#define MICROPORT
44#endif
45
46#define GvXPVGV(gv) ((XPVGV*)SvANY(gv))
47
48#define GvMAGIC(gv) (GvGP(gv)->gp_magic)
49#define GvSV(gv) (GvGP(gv)->gp_sv)
50#define GvREFCNT(gv) (GvGP(gv)->gp_refcnt)
51#define GvIO(gv) (GvGP(gv)->gp_io)
52#define GvIOn(gv) (GvIO(gv) ? \
53 GvIO(gv) : \
54 (GvIO(gv) = newIO()))
55
56#define GvFORM(gv) (GvGP(gv)->gp_form)
57#define GvAV(gv) (GvGP(gv)->gp_av)
58
59#ifdef MICROPORT /* Microport 2.4 hack */
60AV *GvAVn();
61#else
62#define GvAVn(gv) (GvGP(gv)->gp_av ? \
63 GvGP(gv)->gp_av : \
64 GvGP(gv_AVadd(gv))->gp_av)
65#endif
66#define GvHV(gv) ((GvGP(gv))->gp_hv)
67
68#ifdef MICROPORT /* Microport 2.4 hack */
69HV *GvHVn();
70#else
71#define GvHVn(gv) (GvGP(gv)->gp_hv ? \
72 GvGP(gv)->gp_hv : \
73 GvGP(gv_HVadd(gv))->gp_hv)
74#endif /* Microport 2.4 hack */
75
76#define GvCV(gv) (GvGP(gv)->gp_cv)
463ee0b2 77#define GvCVGEN(gv) (GvGP(gv)->gp_cvgen)
79072805 78
79#define GvLASTEXPR(gv) (GvGP(gv)->gp_lastexpr)
80
81#define GvLINE(gv) (GvGP(gv)->gp_line)
82
83#define GvFLAGS(gv) (GvGP(gv)->gp_flags)
84
85#define GvEGV(gv) (GvGP(gv)->gp_egv)
86
87#define GvGP(gv) (GvXPVGV(gv)->xgv_gp)
88#define GvNAME(gv) (GvXPVGV(gv)->xgv_name)
89#define GvNAMELEN(gv) (GvXPVGV(gv)->xgv_namelen)
90#define GvENAME(gv) GvNAME(GvEGV(gv))
91
92#define GvSTASH(gv) (GvXPVGV(gv)->xgv_stash)
93#define GvESTASH(gv) GvSTASH(GvEGV(gv))
94
95struct io {
96 FILE * ifp; /* ifp and ofp are normally the same */
97 FILE * ofp; /* but sockets need separate streams */
98#ifdef HAS_READDIR
99 DIR * dirp; /* for opendir, readdir, etc */
100#endif
101 long lines; /* $. */
102 long page; /* $% */
103 long page_len; /* $= */
104 long lines_left; /* $- */
105 char * top_name; /* $^ */
106 GV * top_gv; /* $^ */
107 char * fmt_name; /* $~ */
108 GV * fmt_gv; /* $~ */
463ee0b2 109 SV * object;
79072805 110 short subprocess; /* -| or |- */
111 char type;
112 char flags;
113};
114
115#define IOf_ARGV 1 /* this fp iterates over ARGV */
116#define IOf_START 2 /* check for null ARGV and substitute '-' */
117#define IOf_FLUSH 4 /* this fp wants a flush after write op */
118
119#define Nullgv Null(GV*)
120
121#define DM_UID 0x003
122#define DM_RUID 0x001
123#define DM_EUID 0x002
124#define DM_GID 0x030
125#define DM_RGID 0x010
126#define DM_EGID 0x020
127#define DM_DELAY 0x100
128