xref: /csrg-svn/usr.bin/pascal/src/tree_ty.h (revision 62219)
148117Sbostic /*-
2*62219Sbostic  * Copyright (c) 1980, 1993
3*62219Sbostic  *	The Regents of the University of California.  All rights reserved.
422254Sdist  *
548117Sbostic  * %sccs.include.redist.c%
648117Sbostic  *
7*62219Sbostic  *	@(#)tree_ty.h	8.1 (Berkeley) 06/06/93
822254Sdist  */
914751Sthien 
1014751Sthien typedef struct /* T_FORU, T_FORD */
1114751Sthien {
1214751Sthien     int		line_no; 	/* line number of for */
1314751Sthien     struct	tnode	*init_asg;	/* initialization */
1414751Sthien     struct	tnode	*term_expr;	/* termination expresssion */
1514751Sthien     struct	tnode	*for_stmnt;	/* for statement */
1614751Sthien } FOR_NODE;
1714751Sthien typedef struct  /* T_ASGN */
1814751Sthien {
1914751Sthien     int		line_no;	/* line number of := */
2014751Sthien     struct	tnode	*lhs_var;
2114751Sthien     struct	tnode	*rhs_expr;
2214751Sthien } ASG_NODE;
2314751Sthien #ifndef PTREE
2414751Sthien typedef struct				/* T_VAR */
2514751Sthien {
2614751Sthien     int 		line_no;
2714751Sthien     char		*cptr;
2814751Sthien     struct tnode	*qual;		/* list node */
2914751Sthien } VAR_NODE;
3014751Sthien typedef struct		/* T_FIELD */
3114751Sthien {
3214751Sthien     char		*id_ptr;
3314751Sthien     struct tnode	*other;
3414751Sthien } FIELD_NODE;
3514751Sthien #else
3614751Sthien typedef struct				/* T_VAR */
3714751Sthien {
3814751Sthien     int 		line_no;
3914751Sthien     char		*cptr;
4014751Sthien     struct tnode	*qual;
4114751Sthien     struct nl		*nl_entry;
4214751Sthien } VAR_NODE;
4314751Sthien typedef struct		/* T_FIELD */
4414751Sthien {
4514751Sthien     char		*id_ptr;
4614751Sthien     struct tnode	*other;
4714751Sthien     struct nl		*nl_entry;
4814751Sthien } FIELD_NODE;
4914751Sthien #endif
5014751Sthien typedef struct				/* T_MOD, T_MULT, T_DIVD, T_DIV,
5114751Sthien 					   T_AND, T_ADD, T_SUB, T_OR,
5214751Sthien 					   T_EQ, T_LT, T_GT, T_NE, T_LE
5314751Sthien 					   T_GE, T_IN */
5414751Sthien {
5514751Sthien     int		const_tag;
5614751Sthien     struct	tnode	*lhs;
5714751Sthien     struct	tnode	*rhs;
5814751Sthien } EXPR_NODE;
5914751Sthien typedef struct			/* T_LISTPP */
6014751Sthien {
6114751Sthien     struct tnode *list;  /* check the types on these,
6214751Sthien 			    this is used in pclvalue and lvalue */
6314751Sthien     struct tnode *next;
6414751Sthien } LIST_NODE;
6514751Sthien typedef struct			/* T_IF, T_IFEL, T_IFX */
6614751Sthien {
6714751Sthien     int           line_no;
6814751Sthien     struct tnode *cond_expr;
6914751Sthien     struct tnode *then_stmnt;
7014751Sthien     struct tnode *else_stmnt;
7114751Sthien } IF_NODE;
7214751Sthien typedef struct			/* T_MINUS, T_PLUS, T_NOT */
7314751Sthien {
7414751Sthien     int		const_tag;
7514751Sthien     struct tnode 	*expr;
7614751Sthien } UN_EXPR;
7714751Sthien typedef struct /* T_PDEC, T_FDEC, T_PROG */
7814751Sthien {
7914751Sthien     int	line_no;
8014751Sthien     char	*id_ptr;
8114751Sthien     struct tnode	*param_list;
8214751Sthien     struct tnode	*type;
8314751Sthien } P_DEC;
8414751Sthien typedef struct	/* T_PVAL, T_PVAR */
8514751Sthien {
8614751Sthien     struct tnode	*id_list;
8714751Sthien     struct tnode	*type;
8814751Sthien } PARAM;
8914751Sthien typedef struct		/* T_PFUNC, T_PPROC */
9014751Sthien {
9114751Sthien     struct tnode	*id_list,
9214751Sthien 			*type,
9314751Sthien 			*param_list;
9414751Sthien     int			line_no;
9514751Sthien } PFUNC_NODE;
9614751Sthien typedef struct		/* T_NIL */
9714751Sthien {
9814751Sthien     int	const_tag;
9914751Sthien } NIL_NODE;
10014751Sthien typedef struct		/* T_STRNG, T_INT, T_FINT, T_BINT */
10114751Sthien {
10214751Sthien     int		const_tag;
10314751Sthien     char	*cptr;
10414751Sthien } CONST_NODE;
10514751Sthien typedef struct		/* T_CSTRNG, T_ID, T_CFINT, T_CINT, T_CBINT */
10614751Sthien {
10714751Sthien     char	*cptr;
10814751Sthien } CHAR_CONST;
10914751Sthien typedef struct		/* T_PLUSC, T_MINUSC */
11014751Sthien {
11114751Sthien     struct tnode	*number;
11214751Sthien } SIGN_CONST;
11314751Sthien #ifdef PTREE
11414751Sthien typedef struct
11514751Sthien {
11614751Sthien     int	line_no
11714751Sthien     struct tnode	*type;
11814751Sthien     struct nl		*nl_entry;
11914751Sthien } COMP_TY;
12014751Sthien #else
12114751Sthien typedef struct		/* T_TYPACK, T_TYSCAL, T_TYFILE, T_TYSET, T_TYREC */
12214751Sthien {
12314751Sthien     int		  line_no;
12414751Sthien     struct tnode *type;
12514751Sthien } COMP_TY;
12614751Sthien #endif
12714751Sthien typedef struct		/* T_TYPTR */
12814751Sthien {
12914751Sthien     int			 line_no;
13014751Sthien     struct tnode	*id_node;
13114751Sthien } PTR_TY;
13214751Sthien typedef struct		/* T_TYRANG */
13314751Sthien {
13414751Sthien     int			 line_no;
13514751Sthien     struct tnode	*const1;
13614751Sthien     struct tnode	*const2;
13714751Sthien } RANG_TY;
13815975Smckusick typedef struct		/* T_TYCRANG */
13914751Sthien {
14014751Sthien     int			 line_no;
14115975Smckusick     struct tnode	*lwb_var;
14215975Smckusick     struct tnode	*upb_var;
14315975Smckusick     struct tnode	*type;
14415975Smckusick } CRANG_TY;
14515975Smckusick typedef struct		/* T_TYARY, T_TYCARY */
14615975Smckusick {
14715975Smckusick     int			 line_no;
14814751Sthien     struct tnode	*type_list;
14914751Sthien     struct tnode	*type;
15014751Sthien } ARY_TY;
15114751Sthien typedef struct		/* T_TYVARNT */
15214751Sthien {
15314751Sthien     int 		 line_no;
15414751Sthien     struct tnode	*const_list;
15514751Sthien     struct tnode	*fld_list;
15614751Sthien } TYVARNT;
15714751Sthien typedef struct		/* T_TYVARPT */
15814751Sthien {
15914751Sthien     int			 line_no;
16014751Sthien     char		*cptr;
16114751Sthien     struct tnode	*type_id;
16214751Sthien     struct tnode	*var_list;
16314751Sthien } VARPT;
16414751Sthien typedef struct		/* T_CSTAT */
16514751Sthien {
16614751Sthien     int 		 line_no;
16714751Sthien     struct tnode	*const_list;
16814751Sthien     struct tnode	*stmnt;
16914751Sthien } C_STMNT;
17014751Sthien typedef struct		/* T_BSTL, T_BLOCK */
17114751Sthien {
17214751Sthien     int			line_no;
17314751Sthien     struct tnode	*stmnt_list;
17414751Sthien } STMNT_BLCK;
17514751Sthien typedef struct		/* T_FLDLST */
17614751Sthien {
17714751Sthien     int 		line_no;
17814751Sthien     struct tnode	*fix_list;
17914751Sthien     struct tnode	*variant;
18014751Sthien } FLDLST;
18114751Sthien typedef struct		/* T_RFIELD */
18214751Sthien {
18314751Sthien     int			line_no;
18414751Sthien     struct tnode	*id_list;
18514751Sthien     struct tnode	*type;
18614751Sthien } RFIELD;
18714751Sthien typedef struct		/* T_LABEL */
18814751Sthien {
18914751Sthien     int 		line_no;
19014751Sthien     char		*lbl_ptr;
19114751Sthien     struct tnode	*stmnt;
19214751Sthien } LABEL_NODE;
19314751Sthien typedef struct		/* T_GOTO */
19414751Sthien {
19514751Sthien     int		line_no;
19614751Sthien     char	*lbl_ptr;
19714751Sthien } GOTO_NODE;
19814751Sthien typedef struct		/* T_PCALL, T_FCALL */
19914751Sthien {
20014751Sthien     int			line_no;
20114751Sthien     char		*proc_id;
20214751Sthien     struct tnode	*arg;
20314751Sthien } PCALL_NODE;
20414751Sthien typedef struct		/* T_CASE, T_WHILE */
20514751Sthien {
20614751Sthien     int			line_no;
20714751Sthien     struct tnode	*expr;
20814751Sthien     struct tnode	*stmnt_list;
20914751Sthien } WHI_CAS;
21014751Sthien typedef struct		/* T_WITH */
21114751Sthien {
21214751Sthien     int			line_no;
21314751Sthien     struct tnode	*var_list;
21414751Sthien     struct tnode	*stmnt;
21514751Sthien } WITH_NODE;
21614751Sthien typedef struct		/* T_REPEAT */
21714751Sthien {
21814751Sthien     int			line_no;
21914751Sthien     struct tnode	*stmnt_list;
22014751Sthien     struct tnode	*term_expr;
22114751Sthien } REPEAT;
22214751Sthien typedef struct		/* T_RANG */
22314751Sthien {
22414751Sthien     struct tnode	*expr1;
22514751Sthien     struct tnode	*expr2;
22614751Sthien } RANG;
22714751Sthien typedef struct		/* T_CSET */
22814751Sthien {
22914751Sthien     int			const_tag;
23014751Sthien     struct tnode	*el_list;
23114751Sthien } CSET_NODE;
23214751Sthien typedef struct		/* T_ARY */
23314751Sthien {
23414751Sthien     struct tnode	*expr_list;
23514751Sthien } ARY_NODE;
23614751Sthien typedef struct		/* T_WEXPR */
23714751Sthien {
23814751Sthien     struct tnode	*expr1;
23914751Sthien     struct tnode	*expr2;
24014751Sthien     struct tnode	*expr3;
24114751Sthien } WEXPR_NODE;
24214751Sthien typedef struct		/* T_TYID */
24314751Sthien {
24414751Sthien     int			line_no;
24514751Sthien     char		*idptr;
24614751Sthien } TYID_NODE;
24714751Sthien typedef struct		/* anything with linenumber in first field */
24814751Sthien {
24914751Sthien     int			line_no;
25014751Sthien } LINED;
25114751Sthien 
25213785Sthien struct tnode
25313785Sthien {
25413785Sthien     int tag;
25513785Sthien     union
25613785Sthien     {
25714751Sthien 	FOR_NODE	t_for_node;
25814751Sthien 	ASG_NODE	t_asg_node;
25914751Sthien 	VAR_NODE	t_var_node;
26014751Sthien 	EXPR_NODE	t_expr_node;
26114751Sthien 	LIST_NODE	t_list_node;
26214751Sthien 	IF_NODE		t_if_node;
26314751Sthien 	UN_EXPR		t_un_expr;
26414751Sthien 	P_DEC		t_p_dec;
26514751Sthien 	PARAM		t_param;
26614751Sthien 	PFUNC_NODE	t_pfunc_node;
26714751Sthien 	NIL_NODE	t_nil_node;
26814751Sthien 	CONST_NODE	t_const_node;
26914751Sthien 	CHAR_CONST	t_char_const;
27014751Sthien 	SIGN_CONST	t_sign_const;
27114751Sthien 	COMP_TY		t_comp_ty;
27214751Sthien 	PTR_TY		t_ptr_ty;
27314751Sthien 	RANG_TY		t_rang_ty;
27415975Smckusick 	CRANG_TY	t_crang_ty;
27514751Sthien 	ARY_TY		t_ary_ty;
27614751Sthien 	VARPT		t_varpt;
27714751Sthien 	TYVARNT		t_tyvarnt;
27814751Sthien 	C_STMNT		t_c_stmnt;
27914751Sthien 	STMNT_BLCK	t_stmnt_blck;
28014751Sthien 	FLDLST		t_fldlst;
28114751Sthien 	RFIELD		t_rfield;
28214751Sthien 	LABEL_NODE	t_label_node;
28314751Sthien 	PCALL_NODE	t_pcall_node;
28414751Sthien 	WHI_CAS		t_whi_cas;
28514751Sthien 	WITH_NODE	t_with_node;
28614751Sthien 	REPEAT		t_repeat;
28714751Sthien 	RANG		t_rang;
28814751Sthien 	CSET_NODE	t_cset_node;
28914751Sthien 	ARY_NODE	t_ary_node;
29014751Sthien 	WEXPR_NODE	t_wexpr_node;
29114751Sthien 	FIELD_NODE	t_field_node;
29214751Sthien 	TYID_NODE	t_tyid_node;
29314751Sthien 	LINED		t_lined;
29414751Sthien 	GOTO_NODE	t_goto_node;
29513785Sthien     } tree_ele;
29613785Sthien };
29714751Sthien 
29814751Sthien #define	for_node		tree_ele.t_for_node
29914751Sthien #define	asg_node		tree_ele.t_asg_node
30014751Sthien #define	var_node		tree_ele.t_var_node
30114751Sthien #define	expr_node		tree_ele.t_expr_node
30214751Sthien #define	list_node tree_ele.t_list_node
30314751Sthien #define	if_node			tree_ele.t_if_node
30414751Sthien #define	un_expr			tree_ele.t_un_expr
30514751Sthien #define	p_dec			tree_ele.t_p_dec
30614751Sthien #define	param			tree_ele.t_param
30714751Sthien #define	pfunc_node		tree_ele.t_pfunc_node
30814751Sthien #define	nil_node		tree_ele.t_nil_node
30914751Sthien #define	const_node		tree_ele.t_const_node
31014751Sthien #define	char_const		tree_ele.t_char_const
31114751Sthien #define	sign_const		tree_ele.t_sign_const
31214751Sthien #define	comp_ty			tree_ele.t_comp_ty
31314751Sthien #define	ptr_ty			tree_ele.t_ptr_ty
31414751Sthien #define	rang_ty			tree_ele.t_rang_ty
31515975Smckusick #define	crang_ty		tree_ele.t_crang_ty
31614751Sthien #define	ary_ty			tree_ele.t_ary_ty
31714751Sthien #define	varpt			tree_ele.t_varpt
31814751Sthien #define	tyvarnt			tree_ele.t_tyvarnt
31914751Sthien #define	c_stmnt			tree_ele.t_c_stmnt
32014751Sthien #define	stmnt_blck		tree_ele.t_stmnt_blck
32114751Sthien #define	fldlst			tree_ele.t_fldlst
32214751Sthien #define	rfield			tree_ele.t_rfield
32314751Sthien #define	label_node		tree_ele.t_label_node
32414751Sthien #define	pcall_node		tree_ele.t_pcall_node
32514751Sthien #define	whi_cas			tree_ele.t_whi_cas
32614751Sthien #define	with_node		tree_ele.t_with_node
32714751Sthien #define	repeat			tree_ele.t_repeat
32814751Sthien #define	rang			tree_ele.t_rang
32914751Sthien #define	cset_node		tree_ele.t_cset_node
33014751Sthien #define	ary_node		tree_ele.t_ary_node
33114751Sthien #define	wexpr_node		tree_ele.t_wexpr_node
33214751Sthien #define	field_node		tree_ele.t_field_node
33314751Sthien #define	tyid_node		tree_ele.t_tyid_node
33414751Sthien #define	lined			tree_ele.t_lined
33514751Sthien #define	goto_node		tree_ele.t_goto_node
336