xref: /csrg-svn/usr.bin/pascal/src/tree_ty.h (revision 14751)
1*14751Sthien /* Copyright (c) 1979 Regents of the University of California */
2*14751Sthien 
3*14751Sthien /* static char sccsid[]="@(#)tree_ty.h 1.2 7/1/83"; */
4*14751Sthien 
5*14751Sthien typedef struct /* T_FORU, T_FORD */
6*14751Sthien {
7*14751Sthien     int		line_no; 	/* line number of for */
8*14751Sthien     struct	tnode	*init_asg;	/* initialization */
9*14751Sthien     struct	tnode	*term_expr;	/* termination expresssion */
10*14751Sthien     struct	tnode	*for_stmnt;	/* for statement */
11*14751Sthien } FOR_NODE;
12*14751Sthien typedef struct  /* T_ASGN */
13*14751Sthien {
14*14751Sthien     int		line_no;	/* line number of := */
15*14751Sthien     struct	tnode	*lhs_var;
16*14751Sthien     struct	tnode	*rhs_expr;
17*14751Sthien } ASG_NODE;
18*14751Sthien #ifndef PTREE
19*14751Sthien typedef struct				/* T_VAR */
20*14751Sthien {
21*14751Sthien     int 		line_no;
22*14751Sthien     char		*cptr;
23*14751Sthien     struct tnode	*qual;		/* list node */
24*14751Sthien } VAR_NODE;
25*14751Sthien typedef struct		/* T_FIELD */
26*14751Sthien {
27*14751Sthien     char		*id_ptr;
28*14751Sthien     struct tnode	*other;
29*14751Sthien } FIELD_NODE;
30*14751Sthien #else
31*14751Sthien typedef struct				/* T_VAR */
32*14751Sthien {
33*14751Sthien     int 		line_no;
34*14751Sthien     char		*cptr;
35*14751Sthien     struct tnode	*qual;
36*14751Sthien     struct nl		*nl_entry;
37*14751Sthien } VAR_NODE;
38*14751Sthien typedef struct		/* T_FIELD */
39*14751Sthien {
40*14751Sthien     char		*id_ptr;
41*14751Sthien     struct tnode	*other;
42*14751Sthien     struct nl		*nl_entry;
43*14751Sthien } FIELD_NODE;
44*14751Sthien #endif
45*14751Sthien typedef struct				/* T_MOD, T_MULT, T_DIVD, T_DIV,
46*14751Sthien 					   T_AND, T_ADD, T_SUB, T_OR,
47*14751Sthien 					   T_EQ, T_LT, T_GT, T_NE, T_LE
48*14751Sthien 					   T_GE, T_IN */
49*14751Sthien {
50*14751Sthien     int		const_tag;
51*14751Sthien     struct	tnode	*lhs;
52*14751Sthien     struct	tnode	*rhs;
53*14751Sthien } EXPR_NODE;
54*14751Sthien typedef struct			/* T_LISTPP */
55*14751Sthien {
56*14751Sthien     struct tnode *list;  /* check the types on these,
57*14751Sthien 			    this is used in pclvalue and lvalue */
58*14751Sthien     struct tnode *next;
59*14751Sthien } LIST_NODE;
60*14751Sthien typedef struct			/* T_IF, T_IFEL, T_IFX */
61*14751Sthien {
62*14751Sthien     int           line_no;
63*14751Sthien     struct tnode *cond_expr;
64*14751Sthien     struct tnode *then_stmnt;
65*14751Sthien     struct tnode *else_stmnt;
66*14751Sthien } IF_NODE;
67*14751Sthien typedef struct			/* T_MINUS, T_PLUS, T_NOT */
68*14751Sthien {
69*14751Sthien     int		const_tag;
70*14751Sthien     struct tnode 	*expr;
71*14751Sthien } UN_EXPR;
72*14751Sthien typedef struct /* T_PDEC, T_FDEC, T_PROG */
73*14751Sthien {
74*14751Sthien     int	line_no;
75*14751Sthien     char	*id_ptr;
76*14751Sthien     struct tnode	*param_list;
77*14751Sthien     struct tnode	*type;
78*14751Sthien } P_DEC;
79*14751Sthien typedef struct	/* T_PVAL, T_PVAR */
80*14751Sthien {
81*14751Sthien     struct tnode	*id_list;
82*14751Sthien     struct tnode	*type;
83*14751Sthien } PARAM;
84*14751Sthien typedef struct		/* T_PFUNC, T_PPROC */
85*14751Sthien {
86*14751Sthien     struct tnode	*id_list,
87*14751Sthien 			*type,
88*14751Sthien 			*param_list;
89*14751Sthien     int			line_no;
90*14751Sthien } PFUNC_NODE;
91*14751Sthien typedef struct		/* T_NIL */
92*14751Sthien {
93*14751Sthien     int	const_tag;
94*14751Sthien } NIL_NODE;
95*14751Sthien typedef struct		/* T_STRNG, T_INT, T_FINT, T_BINT */
96*14751Sthien {
97*14751Sthien     int		const_tag;
98*14751Sthien     char	*cptr;
99*14751Sthien } CONST_NODE;
100*14751Sthien typedef struct		/* T_CSTRNG, T_ID, T_CFINT, T_CINT, T_CBINT */
101*14751Sthien {
102*14751Sthien     char	*cptr;
103*14751Sthien } CHAR_CONST;
104*14751Sthien typedef struct		/* T_PLUSC, T_MINUSC */
105*14751Sthien {
106*14751Sthien     struct tnode	*number;
107*14751Sthien } SIGN_CONST;
108*14751Sthien #ifdef PTREE
109*14751Sthien typedef struct
110*14751Sthien {
111*14751Sthien     int	line_no
112*14751Sthien     struct tnode	*type;
113*14751Sthien     struct nl		*nl_entry;
114*14751Sthien } COMP_TY;
115*14751Sthien #else
116*14751Sthien typedef struct		/* T_TYPACK, T_TYSCAL, T_TYFILE, T_TYSET, T_TYREC */
117*14751Sthien {
118*14751Sthien     int		  line_no;
119*14751Sthien     struct tnode *type;
120*14751Sthien } COMP_TY;
121*14751Sthien #endif
122*14751Sthien typedef struct		/* T_TYPTR */
123*14751Sthien {
124*14751Sthien     int			 line_no;
125*14751Sthien     struct tnode	*id_node;
126*14751Sthien } PTR_TY;
127*14751Sthien typedef struct		/* T_TYRANG */
128*14751Sthien {
129*14751Sthien     int			 line_no;
130*14751Sthien     struct tnode	*const1;
131*14751Sthien     struct tnode	*const2;
132*14751Sthien } RANG_TY;
133*14751Sthien typedef struct		/* T_TYARY */
134*14751Sthien {
135*14751Sthien     int			 line_no;
136*14751Sthien     struct tnode	*type_list;
137*14751Sthien     struct tnode	*type;
138*14751Sthien } ARY_TY;
139*14751Sthien typedef struct		/* T_TYVARNT */
140*14751Sthien {
141*14751Sthien     int 		 line_no;
142*14751Sthien     struct tnode	*const_list;
143*14751Sthien     struct tnode	*fld_list;
144*14751Sthien } TYVARNT;
145*14751Sthien typedef struct		/* T_TYVARPT */
146*14751Sthien {
147*14751Sthien     int			 line_no;
148*14751Sthien     char		*cptr;
149*14751Sthien     struct tnode	*type_id;
150*14751Sthien     struct tnode	*var_list;
151*14751Sthien } VARPT;
152*14751Sthien typedef struct		/* T_CSTAT */
153*14751Sthien {
154*14751Sthien     int 		 line_no;
155*14751Sthien     struct tnode	*const_list;
156*14751Sthien     struct tnode	*stmnt;
157*14751Sthien } C_STMNT;
158*14751Sthien typedef struct		/* T_BSTL, T_BLOCK */
159*14751Sthien {
160*14751Sthien     int			line_no;
161*14751Sthien     struct tnode	*stmnt_list;
162*14751Sthien } STMNT_BLCK;
163*14751Sthien typedef struct		/* T_FLDLST */
164*14751Sthien {
165*14751Sthien     int 		line_no;
166*14751Sthien     struct tnode	*fix_list;
167*14751Sthien     struct tnode	*variant;
168*14751Sthien } FLDLST;
169*14751Sthien typedef struct		/* T_RFIELD */
170*14751Sthien {
171*14751Sthien     int			line_no;
172*14751Sthien     struct tnode	*id_list;
173*14751Sthien     struct tnode	*type;
174*14751Sthien } RFIELD;
175*14751Sthien typedef struct		/* T_LABEL */
176*14751Sthien {
177*14751Sthien     int 		line_no;
178*14751Sthien     char		*lbl_ptr;
179*14751Sthien     struct tnode	*stmnt;
180*14751Sthien } LABEL_NODE;
181*14751Sthien typedef struct		/* T_GOTO */
182*14751Sthien {
183*14751Sthien     int		line_no;
184*14751Sthien     char	*lbl_ptr;
185*14751Sthien } GOTO_NODE;
186*14751Sthien typedef struct		/* T_PCALL, T_FCALL */
187*14751Sthien {
188*14751Sthien     int			line_no;
189*14751Sthien     char		*proc_id;
190*14751Sthien     struct tnode	*arg;
191*14751Sthien } PCALL_NODE;
192*14751Sthien typedef struct		/* T_CASE, T_WHILE */
193*14751Sthien {
194*14751Sthien     int			line_no;
195*14751Sthien     struct tnode	*expr;
196*14751Sthien     struct tnode	*stmnt_list;
197*14751Sthien } WHI_CAS;
198*14751Sthien typedef struct		/* T_WITH */
199*14751Sthien {
200*14751Sthien     int			line_no;
201*14751Sthien     struct tnode	*var_list;
202*14751Sthien     struct tnode	*stmnt;
203*14751Sthien } WITH_NODE;
204*14751Sthien typedef struct		/* T_REPEAT */
205*14751Sthien {
206*14751Sthien     int			line_no;
207*14751Sthien     struct tnode	*stmnt_list;
208*14751Sthien     struct tnode	*term_expr;
209*14751Sthien } REPEAT;
210*14751Sthien typedef struct		/* T_RANG */
211*14751Sthien {
212*14751Sthien     struct tnode	*expr1;
213*14751Sthien     struct tnode	*expr2;
214*14751Sthien } RANG;
215*14751Sthien typedef struct		/* T_CSET */
216*14751Sthien {
217*14751Sthien     int			const_tag;
218*14751Sthien     struct tnode	*el_list;
219*14751Sthien } CSET_NODE;
220*14751Sthien typedef struct		/* T_ARY */
221*14751Sthien {
222*14751Sthien     struct tnode	*expr_list;
223*14751Sthien } ARY_NODE;
224*14751Sthien typedef struct		/* T_WEXPR */
225*14751Sthien {
226*14751Sthien     struct tnode	*expr1;
227*14751Sthien     struct tnode	*expr2;
228*14751Sthien     struct tnode	*expr3;
229*14751Sthien } WEXPR_NODE;
230*14751Sthien typedef struct		/* T_TYID */
231*14751Sthien {
232*14751Sthien     int			line_no;
233*14751Sthien     char		*idptr;
234*14751Sthien } TYID_NODE;
235*14751Sthien typedef struct		/* anything with linenumber in first field */
236*14751Sthien {
237*14751Sthien     int			line_no;
238*14751Sthien } LINED;
239*14751Sthien 
24013785Sthien struct tnode
24113785Sthien {
24213785Sthien     int tag;
24313785Sthien     union
24413785Sthien     {
245*14751Sthien 	FOR_NODE	t_for_node;
246*14751Sthien 	ASG_NODE	t_asg_node;
247*14751Sthien 	VAR_NODE	t_var_node;
248*14751Sthien 	EXPR_NODE	t_expr_node;
249*14751Sthien 	LIST_NODE	t_list_node;
250*14751Sthien 	IF_NODE		t_if_node;
251*14751Sthien 	UN_EXPR		t_un_expr;
252*14751Sthien 	P_DEC		t_p_dec;
253*14751Sthien 	PARAM		t_param;
254*14751Sthien 	PFUNC_NODE	t_pfunc_node;
255*14751Sthien 	NIL_NODE	t_nil_node;
256*14751Sthien 	CONST_NODE	t_const_node;
257*14751Sthien 	CHAR_CONST	t_char_const;
258*14751Sthien 	SIGN_CONST	t_sign_const;
259*14751Sthien 	COMP_TY		t_comp_ty;
260*14751Sthien 	PTR_TY		t_ptr_ty;
261*14751Sthien 	RANG_TY		t_rang_ty;
262*14751Sthien 	ARY_TY		t_ary_ty;
263*14751Sthien 	VARPT		t_varpt;
264*14751Sthien 	TYVARNT		t_tyvarnt;
265*14751Sthien 	C_STMNT		t_c_stmnt;
266*14751Sthien 	STMNT_BLCK	t_stmnt_blck;
267*14751Sthien 	FLDLST		t_fldlst;
268*14751Sthien 	RFIELD		t_rfield;
269*14751Sthien 	LABEL_NODE	t_label_node;
270*14751Sthien 	PCALL_NODE	t_pcall_node;
271*14751Sthien 	WHI_CAS		t_whi_cas;
272*14751Sthien 	WITH_NODE	t_with_node;
273*14751Sthien 	REPEAT		t_repeat;
274*14751Sthien 	RANG		t_rang;
275*14751Sthien 	CSET_NODE	t_cset_node;
276*14751Sthien 	ARY_NODE	t_ary_node;
277*14751Sthien 	WEXPR_NODE	t_wexpr_node;
278*14751Sthien 	FIELD_NODE	t_field_node;
279*14751Sthien 	TYID_NODE	t_tyid_node;
280*14751Sthien 	LINED		t_lined;
281*14751Sthien 	GOTO_NODE	t_goto_node;
28213785Sthien     } tree_ele;
28313785Sthien };
284*14751Sthien 
285*14751Sthien #define	for_node		tree_ele.t_for_node
286*14751Sthien #define	asg_node		tree_ele.t_asg_node
287*14751Sthien #define	var_node		tree_ele.t_var_node
288*14751Sthien #define	expr_node		tree_ele.t_expr_node
289*14751Sthien #define	list_node tree_ele.t_list_node
290*14751Sthien #define	if_node			tree_ele.t_if_node
291*14751Sthien #define	un_expr			tree_ele.t_un_expr
292*14751Sthien #define	p_dec			tree_ele.t_p_dec
293*14751Sthien #define	param			tree_ele.t_param
294*14751Sthien #define	pfunc_node		tree_ele.t_pfunc_node
295*14751Sthien #define	nil_node		tree_ele.t_nil_node
296*14751Sthien #define	const_node		tree_ele.t_const_node
297*14751Sthien #define	char_const		tree_ele.t_char_const
298*14751Sthien #define	sign_const		tree_ele.t_sign_const
299*14751Sthien #define	comp_ty			tree_ele.t_comp_ty
300*14751Sthien #define	ptr_ty			tree_ele.t_ptr_ty
301*14751Sthien #define	rang_ty			tree_ele.t_rang_ty
302*14751Sthien #define	ary_ty			tree_ele.t_ary_ty
303*14751Sthien #define	varpt			tree_ele.t_varpt
304*14751Sthien #define	tyvarnt			tree_ele.t_tyvarnt
305*14751Sthien #define	c_stmnt			tree_ele.t_c_stmnt
306*14751Sthien #define	stmnt_blck		tree_ele.t_stmnt_blck
307*14751Sthien #define	fldlst			tree_ele.t_fldlst
308*14751Sthien #define	rfield			tree_ele.t_rfield
309*14751Sthien #define	label_node		tree_ele.t_label_node
310*14751Sthien #define	pcall_node		tree_ele.t_pcall_node
311*14751Sthien #define	whi_cas			tree_ele.t_whi_cas
312*14751Sthien #define	with_node		tree_ele.t_with_node
313*14751Sthien #define	repeat			tree_ele.t_repeat
314*14751Sthien #define	rang			tree_ele.t_rang
315*14751Sthien #define	cset_node		tree_ele.t_cset_node
316*14751Sthien #define	ary_node		tree_ele.t_ary_node
317*14751Sthien #define	wexpr_node		tree_ele.t_wexpr_node
318*14751Sthien #define	field_node		tree_ele.t_field_node
319*14751Sthien #define	tyid_node		tree_ele.t_tyid_node
320*14751Sthien #define	lined			tree_ele.t_lined
321*14751Sthien #define	goto_node		tree_ele.t_goto_node
322