xref: /original-bsd/usr.bin/f77/pass1.vax/data.h (revision 47436896)
1 /*-
2  * Copyright (c) 1980 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * %sccs.include.proprietary.c%
6  *
7  *	@(#)data.h	5.2 (Berkeley) 04/12/91
8  */
9 
10 /*  Forms of data list elements  */
11 
12 #define	SIMPLE	1
13 #define NESTED	2
14 
15 
16 /*  data expression block types  */
17 
18 #define	DVALUE	1
19 #define	DVAR	2
20 #define	DNAME	3
21 #define DEXPR	4
22 #define	DERROR	5
23 
24 
25 /*  status codes for integer values  */
26 
27 #define	NORMAL	 1
28 #define MAXPLUS1 2
29 #define MINLESS1 3
30 #define	ERRVAL	 4
31 
32 
33 
34 /*  data types for data statements  */
35 
36 
37 typedef
38   struct Dvalue
39     {
40       char	tag;
41       char	status;
42       ftnint	value;
43     }
44   dvalue;
45 
46 
47 typedef
48   struct Dvar
49     {
50       char	tag;
51       struct Dvalue	*valp;
52     }
53   dvar;
54 
55 
56 typedef
57   struct Dname
58     {
59       char	tag;
60       int	len;
61       char	*repr;
62     }
63   dname;
64 
65 
66 typedef
67   struct Dexpr
68     {
69       char	tag;
70       char	opcode;
71       union Vexpr	*left;
72       union Vexpr	*right;
73     }
74   dexpr;
75 
76 
77 typedef
78   struct Derror
79     {
80       char	tag;
81     }
82   derror;
83 
84 
85 typedef
86   union Vexpr
87     {
88       char	tag;
89       struct Dvalue	dvalue;
90       struct Dvar	dvar;
91       struct Dname	dname;
92       struct Dexpr	dexpr;
93       struct Derror	derror;
94     }
95   vexpr;
96 
97 
98 typedef
99   struct Elist
100     {
101       struct Elist	*next;
102       union Delt	*elt;
103     }
104   elist;
105 
106 
107 typedef
108   struct Aelt
109     {
110       char	tag;
111       Namep	var;
112       struct Vlist	*subs;
113       struct Rpair	*range;
114     }
115   aelt;
116 
117 
118 typedef
119   struct DoList
120     {
121       char	tag;
122       struct Elist	*elts;
123       union Vexpr	*dovar;
124       union Vexpr	*init;
125       union Vexpr	*limit;
126       union Vexpr	*step;
127     }
128   dolist;
129 
130 
131 typedef
132   union Delt
133     {
134       char	tag;
135       struct Aelt	simple;
136       struct DoList	nested;
137     }
138   delt;
139 
140 
141 typedef
142   struct Rpair
143     {
144       union Vexpr	*low;
145       union Vexpr	*high;
146     }
147   rpair;
148 
149 
150 typedef
151   struct ValList
152     {
153       struct ValList	*next;
154       char	status;
155       int	repl;
156       Constp	value;
157     }
158   vallist;
159 
160 
161 typedef
162   struct Vlist
163     {
164       struct Vlist	*next;
165       union Vexpr	*val;
166     }
167   vlist;
168 
169 
170 typedef
171   struct DoVars
172     {
173       struct DoVars *next;
174       int len;
175       char *repr;
176       dvalue *valp;
177     }
178   dovars;
179 
180 
181 
182 /*  Global variables  */
183 
184 extern int badvalue;
185 extern flag overlapflag;
186 
187 
188 /*  Global procedures  */
189 
190 extern frvexpr();
191 extern frvlist();
192 extern elist *revelist();
193 extern vlist *revvlist();
194 extern vlist *prepvexpr();
195 extern elist *preplval();
196 extern delt *mkdlval();
197 extern delt *mkdatado();
198 extern rpair *mkdrange();
199 extern vallist *mkdrval();
200 extern vexpr *evicon();
201 extern vexpr *mkdname();
202 extern expptr ivaltoicon();
203 extern expptr evparam();
204 extern vexpr *evaldname();
205 extern vexpr *mkdexpr();
206 extern vexpr *addivals();
207 extern vexpr *subivals();
208 extern vexpr *mulivals();
209 extern vexpr *divivals();
210 extern vexpr *powivals();
211 extern vexpr *negival();
212 extern expptr convconst();
213 extern savedata();
214