#DJDSTOP # # include "parm.h" # # include "stree/ststructs.mh" # # include "../stt/sttdefs.h" # # # include "../applinfer/precedence.h" # #DJDSTART $include "defs.icn" $include "global_vars.icn" # $include procedure initids() local var_param, val_param, as_params, two_params, al_params yyvline := 9999 # initialize string table indicees stt_enter("?",2) # Make sure index 0 is not used indx_passign := stt_enter("+=",3) indx_massign := stt_enter("-=",3) indx_assign := pend[1 + 0] := stt_enter(":=",3) indx_or := pend[1 + 1] := pend[1 + 2] := pend[1 + 3] := pend[1 + 4] := stt_enter("or",3) indx_and := pend[1 + 5] := stt_enter("and",4) indx_not := pend[1 + 6] := stt_enter("not",4) indx_equals := stt_enter(":=",2) indx_less := stt_enter("<",2) indx_le := stt_enter("<:=",3) indx_ge := stt_enter(">:=",3) indx_ne := stt_enter("<>",3) indx_greater := pend[1 + 7] := stt_enter(">",2) indx_plus := stt_enter("+",2) indx_minus := pend[1 + 8] := stt_enter("-",2) indx_times := stt_enter("*",2) indx_divide := stt_enter("/",2) indx_mod := pend[1 + 9] := stt_enter("%",2) indx_pconc := stt_enter("^+",3) indx_sconc := pend[1 + 10] := stt_enter("^*",3) indx_exp := pend[1 + 11] := stt_enter("**",3) indx_deref := pend[1 + 12] := stt_enter("^",2) indx_subscr := pend[1 + 13] := stt_enter(".",2) indx_New := stt_enter("New",4) indx_ptr_New := stt_enter("ptr_New",8) indx_init_New := stt_enter("init_New",9) indx_ValueOf := stt_enter("V",2) indx_First := stt_enter("First",6) indx_Last := stt_enter("Last",5) indx_Pred := stt_enter("Pred",5) indx_Succ := stt_enter("Succ",5) indx_Ord := stt_enter("Ord",4) indx_OrdInv := stt_enter("OrdInv",7) indx_Card := stt_enter("Card",5) indx_In := stt_enter("In",3) indx_Out := stt_enter("Out",4) indx_Boolean := stt_enter("Boolean",8) indx_true := stt_enter("True",5) indx_false := stt_enter("False",6) indx_Integer := stt_enter("Short",6) indx_Void := stt_enter("Void",5) indx_Array := stt_enter("Array",6) indx_put := stt_enter("put",4) indx_Callcc := stt_enter("Callcc",7) indx_size := stt_enter("size", 5) indx_empty := stt_enter("''",3) indx_simple := stt_enter("simple",7) indx_standard := stt_enter("standard",9) indx_inline := stt_enter("inline",7) indx_Mk := stt_enter("Mk",3) indx_Null := stt_enter("Null",5) id_Boolean := mknode([LETTERID, indx_Boolean]) id_Void := mknode([LETTERID, indx_Void]) id_Integer := mknode([LETTERID, indx_Integer]) id_put := mknode([LETTERID, indx_put]) id_ValueOf := mknode([LETTERID, indx_ValueOf]) id_New := mknode([LETTERID, indx_New]) id_size := mknode([LETTERID, indx_size]) id_Null := mknode([LETTERID, indx_Null]) id_times := mknode([LETTERID, indx_times]) id_plus := mknode([LETTERID, indx_plus]) # initialize default signatures # Note that since these can and will be shared they should not # be touched by the symbol table routine val_Boolean := lock( mknode([VALSIGNATURE, id_Boolean]) ) val_Integer := lock( mknode([VALSIGNATURE, id_Integer]) ) val_Void := lock( mknode([VALSIGNATURE, id_Void]) ) var_Void := lock( mknode([VARSIGNATURE, id_Void]) ) val_param := lock( mknode([PARAMETER, nil, mknode([VALSIGNATURE, mknode([LETTERID]) ]) ]) ) var_param := lock( mknode([PARAMETER, 0, mknode([VARSIGNATURE, mknode([LETTERID]) ]) ]) ) as_params := lock( mklist([var_param, val_param]) ) two_params := lock( mklist([val_param, val_param]) ) al_params := lock(mklist([var_param, var_param]) ) sig_assign := lock( mknode([FUNCSIGNATURE, nil, as_params, val_param.par_signature]) ) sig_pconc := sig_sconc := lock( mknode([FUNCSIGNATURE, nil, two_params, val_param . par_signature])) sig_equals := sig_less := sig_greater := lock( mknode([FUNCSIGNATURE, nil, two_params,val_Boolean]) ) sig_New := lock( mknode([FUNCSIGNATURE, nil, emptylist(), var_param . par_signature]) ) sig_const := lock( mknode([FUNCSIGNATURE, nil, emptylist(), val_param . par_signature]) ) sig_ValueOf := lock( mknode([FUNCSIGNATURE, nil, mklist([var_param]), val_param . par_signature]) ) sig_Signature := lock(mknode([SIGNATURESIG])) sel_true := mknode([LETTERID,indx_true]) sel_true.sel_type := id_Boolean sel_true := mknode([APPLICATION, sel_true, emptylist()]) lock( sel_true ) sel_false := mknode([LETTERID,indx_false]) sel_false.sel_type := id_Boolean sel_false := mknode([APPLICATION, sel_false, emptylist()]) lock( sel_false ) appl_Null := mknode([APPLICATION, id_Null, emptylist()]) yyvline := 0 return end