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