Commit | Line | Data |
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 | |
27 | struct 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 */ |
61 | AV *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 */ |
70 | HV *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 | |