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