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