staload Loc = "ats_location.sats"
typedef loc_t = $Loc.location_t
staload Fil = "ats_filename.sats"
typedef fil_t = $Fil.filename_t
staload "ats_staexp2.sats"
staload "ats_dynexp2.sats"
staload "ats_hiexp.sats"
abstype tmplab_t 
fun tmplab_make (): tmplab_t
fun tmplab_stamp_get (tl: tmplab_t): stamp_t
fun fprint_tmplab {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, tl: tmplab_t): void
fun print_tmplab (tl: tmplab_t): void
fun prerr_tmplab (tl: tmplab_t): void
overload print with print_tmplab
overload prerr with prerr_tmplab
abstype funlab_t typedef funlablst = List funlab_t
viewtypedef funlablst_vt = List_vt (funlab_t)
abstype funentry_t
typedef funentrylst = List funentry_t
typedef funentryopt = Option funentry_t
fun fprint_funlab {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, fl: funlab_t): void
overload fprint with fprint_funlab
fun print_funlab (fl: funlab_t): void
fun prerr_funlab (fl: funlab_t): void
overload print with print_funlab
overload prerr with prerr_funlab
fun fprint_funlablst {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, fls: funlablst): void
overload fprint with fprint_funlablst
fun print_funlablst (fls: funlablst): void
fun prerr_funlablst (fls: funlablst): void
overload print with print_funlablst
overload prerr with prerr_funlablst
fun eq_funlab_funlab (fl1: funlab_t, fl2: funlab_t):<> bool
overload = with eq_funlab_funlab
fun compare_funlab_funlab (fl1: funlab_t, fl2: funlab_t):<> Sgn
overload compare with compare_funlab_funlab
fun funlab_make_typ (hit: hityp_t): funlab_t
fun funlab_make_nam_typ (name: string, hit: hityp_t): funlab_t
fun funlab_make_cst_typ
  (d2c: d2cst_t, tmparg: hityplstlst, hit: hityp_t): funlab_t
fun funlab_make_var_typ (d2v: d2var_t, hit: hityp_t): funlab_t
fun funlab_make_cst_prfck (d2c: d2cst_t): funlab_t
fun funlab_name_get (fl: funlab_t): string
fun funlab_lev_get (fl: funlab_t): int
fun funlab_typ_get (fl: funlab_t): hityp_t
fun funlab_typ_arg_get (fl: funlab_t): hityplst_t
fun funlab_typ_res_get (fl: funlab_t): hityp_t
fun funlab_funclo_get (fl: funlab_t): $Syn.funclo
fun funlab_qua_get (fl: funlab_t): d2cstopt
fun funlab_qua_set (fl: funlab_t, _: d2cstopt): void
  = "atsccomp_funlab_qua_set"
fun funlab_tailjoined_get (fl: funlab_t): tmpvarlst
fun funlab_tailjoined_set (fl: funlab_t, tmps: tmpvarlst): void
  = "atsccomp_funlab_tailjoined_set"
fun funlab_entry_get (fl: funlab_t): funentryopt
fun funlab_entry_set (fl: funlab_t, _: funentryopt): void
  = "atsccomp_funlab_entry_set"
fun funlab_entry_get_some (fl: funlab_t): funentry_t
fun funlab_prfck_get (fl: funlab_t): int
fun fprint_tmpvar {m:file_mode}
   (pf: file_mode_lte (m, w) | out: &FILE m, tmp: tmpvar_t): void
overload fprint with fprint_tmpvar
fun print_tmpvar (tmp: tmpvar_t): void
fun prerr_tmpvar (tmp: tmpvar_t): void
overload print with print_tmpvar
overload prerr with prerr_tmpvar
fun fprint_tmpvarlst {m:file_mode}
   (pf: file_mode_lte (m, w) | out: &FILE m, tmps: tmpvarlst): void
fun print_tmpvarlst (tmps: tmpvarlst): void
fun prerr_tmpvarlst (tmps: tmpvarlst): void
fun eq_tmpvar_tmpvar (tmp1: tmpvar_t, tmp2: tmpvar_t): bool
overload = with eq_tmpvar_tmpvar
fun compare_tmpvar_tmpvar (tmp1: tmpvar_t, tmp2: tmpvar_t):<> Sgn
overload compare with compare_tmpvar_tmpvar
fun tmpvar_make (hit: hityp_t): tmpvar_t
fun tmpvar_make_ret (hit: hityp_t): tmpvar_t
fun tmpvar_make_root (tmp: tmpvar_t): tmpvar_t
fun tmpvarlst_make (hit: hityplst_t): tmpvarlst
fun tmpvar_ret_get (tmp: tmpvar_t): int
fun tmpvar_top_get (tmp: tmpvar_t): int fun tmpvar_root_get (tmp: tmpvar_t): tmpvaropt
fun tmpvar_stamp_get (tmp: tmpvar_t): stamp_t
fun tmpvar_typ_get (tmp: tmpvar_t): hityp_t
fun tmpvar_is_mutable (tmp: tmpvar_t): bool
fun tmpvar_is_void (tmp: tmpvar_t): bool
fun tmpvar_is_nonvoid (tmp: tmpvar_t): bool
abstype envmap_t 
datatype valprim_node =
  | VParg of int
  | VPargref of int 
  | VPbool of bool
  | VPcastfn of (d2cst_t, valprim)
  | VPchar of char
  | VPclo of (int, funlab_t, envmap_t)
  | VPcst of d2cst_t
  | VPcstsp of (loc_t, $Syn.cstsp)   | VPenv of vartyp_t
  | VPext of string
  | VPfix of valprimref
  | VPfloat of string
  | VPfloatsp of string
  | VPfun of funlab_t
  | VPint of intinf_t
  | VPintsp of (string, intinf_t)
  | VPptrof of valprim
  | VPptrof_ptr_offs of (valprim, offsetlst)
  | VPptrof_var_offs of (valprim, offsetlst)
  | VPsizeof of hityp_t
  | VPstring of (string, int)
  | VPtmp of tmpvar_t
  | VPtmpref of tmpvar_t
  | VPtop
  | VPvoid
and offset =
  | OFFSETlab of (lab_t, hityp_t)
  | OFFSETind of (valprimlstlst, hityp_t)
where valprim = '{   valprim_node= valprim_node, valprim_typ= hityp_t } and valprimlst = List valprim
and valprimlstlst = List valprimlst
and valprimlst_vt = List_vt valprim
and valprimref = ref (valprim)
and offsetlst = List offset
datatype labvalprimlst =
  | LABVALPRIMLSTcons of (lab_t, valprim, labvalprimlst)
  | LABVALPRIMLSTnil
fun fprint_valprim {m:file_mode}
   (pf: file_mode_lte (m, w) | out: &FILE m, vp: valprim): void
fun fprint_valprimlst {m:file_mode}
   (pf: file_mode_lte (m, w) | out: &FILE m, vps: valprimlst): void
fun fprint_labvalprimlst {m:file_mode}
   (pf: file_mode_lte (m, w) | out: &FILE m, lvps: labvalprimlst): void
fun print_valprim (vp: valprim): void
overload print with print_valprim
fun prerr_valprim (vp: valprim): void
overload prerr with prerr_valprim
fun print_valprimlst (vps: valprimlst): void
overload print with print_valprimlst
fun prerr_valprimlst (vps: valprimlst): void
overload prerr with prerr_valprimlst
fun fprint_offset {m:file_mode}
   (pf: file_mode_lte (m, w) | out: &FILE m, off: offset): void
fun fprint_offsetlst {m:file_mode}
   (pf: file_mode_lte (m, w) | out: &FILE m, offs: offsetlst): void
fun valprim_is_const (vp: valprim): bool
fun valprim_is_mutable (vp: valprim): bool
fun valprim_arg (i: int, hit: hityp_t): valprim
fun valprim_argref (i: int, hit: hityp_t): valprim
fun valprim_bool (b: bool): valprim
fun valprim_castfn
  (d2c: d2cst_t, vp: valprim, hit: hityp_t): valprim
fun valprim_char (c: char): valprim
fun valprim_clo (knd: int, fl: funlab_t, map: envmap_t): valprim
fun valprim_cst (d2c: d2cst_t, hit: hityp_t): valprim
fun valprim_cstsp (loc: loc_t, cst: $Syn.cstsp, hit: hityp_t): valprim
fun valprim_env (vtp: vartyp_t, hit: hityp_t): valprim
fun valprim_ext (code: string, hit: hityp_t): valprim
fun valprim_fix (vpr: ref (valprim), hit: hityp_t): valprim
fun valprim_float (f: string): valprim
fun valprim_floatsp (f: string, hit: hityp_t): valprim
fun valprim_fun (fl: funlab_t): valprim
fun valprim_int (int: intinf_t): valprim
fun valprim_intsp
  (str: string, int: intinf_t, hit: hityp_t): valprim
fun valprim_ptrof (vp: valprim): valprim
fun valprim_ptrof_ptr_offs (vp: valprim, offs: offsetlst): valprim
fun valprim_ptrof_var_offs (vp: valprim, offs: offsetlst): valprim
fun valprim_sizeof (hit: hityp_t): valprim
fun valprim_string (str: string, len: int): valprim
fun valprim_tmp (tmp: tmpvar_t): valprim
fun valprim_tmpref (tmp: tmpvar_t): valprim
fun valprim_top (hit: hityp_t): valprim
fun valprim_void (): valprim
fun valprim_funclo_make (fl: funlab_t): valprim
fun valprim_is_void (vp: valprim): bool
fun envmap_find (map: envmap_t, d2v: d2var_t): Option_vt (valprim)
datatype patck =
  | PATCKbool of bool
  | PATCKchar of char
  | PATCKcon of d2con_t
  | PATCKexn of d2con_t
  | PATCKfloat of string
  | PATCKint of intinf_t
  | PATCKstring of string
typedef patcklst = List patck
fun fprint_patck {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, _: patck): void
overload fprint with fprint_patck
fun fprint_patcklst {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, _: patcklst): void
overload fprint with fprint_patcklst
abstype matpnt_t
typedef matpntlst = List matpnt_t
typedef matpntopt = Option matpnt_t
datatype kont =
  | KONTnone
  | KONTtmplab of tmplab_t
  | KONTtmplabint of (tmplab_t, int)
  | KONTcaseof_fail of (loc_t)
  | KONTfunarg_fail of (loc_t, funlab_t)
  | KONTraise of valprim
  | KONTmatpnt of matpnt_t
typedef kontlst = List kont
fun fprint_kont {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, _: kont): void
overload fprint with fprint_kont
fun fprint_kontlst {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, _: kontlst): void
overload fprint with fprint_kontlst
fun matpnt_kont_get (mpt: matpnt_t): kont
fun matpnt_kont_set
  (mpt: matpnt_t, _: kont): void = "atsccomp_matpnt_kont_set"
fun emit_kont {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, k: kont): void
fun emit_matpnt {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, mpt: matpnt_t): void
datatype
instr_node =
  | INSTRarr_heap of 
      (tmpvar_t, int, hityp_t)
  | INSTRarr_stack of 
      (tmpvar_t, int, valprim, hityp_t)
  | INSTRassgn_arr of 
      (valprim, valprim, tmpvar_t, valprim)
  | INSTRassgn_clo of 
      (valprim, funlab_t, envmap_t)
  | INSTRcall of 
      (tmpvar_t, hityp_t, valprim, valprimlst)
  | INSTRcall_tail of 
      funlab_t
  | INSTRcond of (valprim, instrlst, instrlst)   | INSTRdefine_clo of (d2cst_t, funlab_t)
  | INSTRdefine_fun of (d2cst_t, funlab_t)
  | INSTRdefine_val of (d2cst_t, valprim)
  | INSTRextern of string   | INSTRextval of (string, valprim)
  | INSTRfreeptr of valprim
  | INSTRfunction of (       tmpvar_t, valprimlst, instrlst, tmpvar_t
    )   | INSTRfunlab of funlab_t
  | INSTRdynload_file of fil_t
  | INSTRload_ptr of (tmpvar_t, valprim)
  | INSTRload_ptr_offs of (tmpvar_t, valprim, offsetlst)
  | INSTRload_var of (tmpvar_t, valprim)
  | INSTRload_var_offs of (tmpvar_t, valprim, offsetlst)
  | INSTRloop of (       tmplab_t
    , tmplab_t
    , tmplab_t
    , instrlst
    , valprim, instrlst
    , instrlst
    , instrlst
    )   | INSTRloopexn of
      (int , tmplab_t)
  | INSTRmove_arg of (int, valprim)
  | INSTRmove_con of
      (tmpvar_t, hityp_t, d2con_t, valprimlst)
  | INSTRmove_lazy_delay of
      (tmpvar_t, int , hityp_t, valprim)
  | INSTRmove_lazy_force of
      (tmpvar_t, int , hityp_t, valprim)
  | INSTRmove_rec_box of
      (tmpvar_t, hityp_t, labvalprimlst)
  | INSTRmove_rec_flt of
      (tmpvar_t, hityp_t, labvalprimlst)
  | INSTRmove_ref of (tmpvar_t, valprim)
  | INSTRmove_val of (tmpvar_t, valprim)
  | INSTRpatck of (valprim, patck, kont)   | INSTRraise of (tmpvar_t, valprim)   | INSTRselect of       (tmpvar_t, valprim, offsetlst)
  | INSTRselcon of       (tmpvar_t, valprim, hityp_t, int)
  | INSTRselcon_ptr of       (tmpvar_t, valprim, hityp_t, int)
  | INSTRswitch of branchlst   | INSTRstore_ptr of
      (valprim, valprim)
  | INSTRstore_ptr_offs of
      (valprim, offsetlst, valprim)
  | INSTRstore_var of
      (valprim, valprim)
  | INSTRstore_var_offs of
      (valprim, offsetlst, valprim)
  | INSTRtmplabint of (tmplab_t, int)
  | INSTRprfck_beg of d2cst_t   | INSTRprfck_end of d2cst_t   | INSTRprfck_tst of d2cst_t   | INSTRtrywith of (instrlst, tmpvar_t, branchlst)
  | INSTRvardec of tmpvar_t
where instr = '{
  instr_loc= loc_t, instr_node= instr_node
} 
and instrlst = List instr
and instrlst_vt = List_vt instr
and branch = '{
  branch_lab= tmplab_t, branch_inss= instrlst
} 
and branchlst = List branch
fun fprint_instr {m:file_mode}
   (pf: file_mode_lte (m, w) | out: &FILE m, ins: instr): void
overload fprint with fprint_instr
fun print_instr (ins: instr): void
overload print with print_instr
fun prerr_instr (ins: instr): void
overload prerr with prerr_instr
fun fprint_instrlst {m:file_mode}
   (pf: file_mode_lte (m, w) | out: &FILE m, inss: instrlst): void
overload fprint with fprint_instrlst
fun print_instrlst (inss: instrlst): void
overload print with print_instrlst
fun prerr_instrlst (inss: instrlst): void
overload prerr with prerr_instrlst
fun fprint_branch {m:file_mode}
   (pf: file_mode_lte (m, w) | out: &FILE m, br: branch): void
fun fprint_branchlst {m:file_mode}
   (pf: file_mode_lte (m, w) | out: &FILE m, brs: branchlst): void
fun instr_call (
  loc: loc_t
, tmp_res: tmpvar_t, hit_fun: hityp_t, vp_fun: valprim, vps_arg: valprimlst
) : instr 
fun instr_call_tail (loc: loc_t, fl: funlab_t): instr
fun instr_cond (
  loc: loc_t, _test: valprim, _then: instrlst, _else: instrlst
) : instr 
fun instr_function (
  loc: loc_t
, tmp_res: tmpvar_t, vps_arg: valprimlst, _body: instrlst, tmp_ret: tmpvar_t
) : instr 
fun instr_funlab (fl: funlab_t): instr
fun instr_prfck_beg (d2c: d2cst_t):<> instr
fun instr_prfck_tst (d2c: d2cst_t):<> instr
fun instr_prfck_end (d2c: d2cst_t):<> instr
fun instr_add_arr_heap (
    res: &instrlst_vt
  , loc: loc_t
  , tmp: tmpvar_t, asz: int
  , hit_elt: hityp_t
  ) : void 
fun instr_add_arr_stack (
    res: &instrlst_vt
  , loc: loc_t
  , tmp: tmpvar_t
  , level: int   , vp_asz: valprim
  , hit_elt: hityp_t
  ) : void 
fun instr_add_assgn_arr (
    res: &instrlst_vt
  , loc: loc_t
  , vp_arr: valprim
  , vp_asz: valprim
  , tmp_elt: tmpvar_t
  , vp_tsz: valprim
  ) : void 
fun instr_add_assgn_clo (
    res: &instrlst_vt
  , loc: loc_t
  , vp_clo: valprim
  , fl: funlab_t, env: envmap_t
  ) : void 
fun instr_add_call (
    res: &instrlst_vt
  , loc: loc_t
  , tmp: tmpvar_t
  , hit_fun: hityp_t
  , vp_fun: valprim
  , vp_arg: valprimlst
  ) : void 
fun instr_add_call_tail
  (res: &instrlst_vt, loc: loc_t, fl: funlab_t): void
fun instr_add_define_clo
  (res: &instrlst_vt, loc: loc_t, d2c: d2cst_t, fl: funlab_t): void
fun instr_add_define_fun
  (res: &instrlst_vt, loc: loc_t, d2c: d2cst_t, fl: funlab_t): void
fun instr_add_define_val
  (res: &instrlst_vt, loc: loc_t, d2c: d2cst_t, vp: valprim): void
fun instr_add_extval
  (res: &instrlst_vt, loc: loc_t, name: string, vp: valprim): void
fun instr_add_freeptr
  (res: &instrlst_vt, loc: loc_t, vp: valprim): void
fun instr_add_patck
  (res: &instrlst_vt, loc: loc_t, _: valprim, _: patck, _: kont): void
fun instr_add_dynload_file
  (res: &instrlst_vt, loc: loc_t, fil: fil_t): void
fun instr_add_load_ptr
  (res: &instrlst_vt, loc: loc_t, tmp: tmpvar_t, vp: valprim): void
fun instr_add_load_ptr_offs (
  res: &instrlst_vt, loc: loc_t, tmp: tmpvar_t, vp: valprim, offs: offsetlst
) : void 
fun instr_add_load_var_offs (
  res: &instrlst_vt, loc: loc_t, tmp: tmpvar_t, vp: valprim, offs: offsetlst
) : void 
fun instr_add_loop (
    res: &instrlst_vt
  , loc: loc_t
  , lab_init: tmplab_t
  , lab_fini: tmplab_t
  , lab_cont: tmplab_t
  , inss_init: instrlst
  , vp_test: valprim
  , inss_test: instrlst
  , inss_post: instrlst
  , inss_body: instrlst
  ) : void
fun instr_add_loopexn
  (res: &instrlst_vt, loc: loc_t, knd: int, tl: tmplab_t): void
fun instr_add_move_arg
  (res: &instrlst_vt, loc: loc_t, arg: int, vp: valprim): void
fun instr_add_move_con (
    res: &instrlst_vt
  , loc: loc_t
  , tmp_res: tmpvar_t
  , hit_sum: hityp_t
  , d2c: d2con_t
  , vps_arg: valprimlst
  ) : void
fun instr_add_move_lazy_delay (
    res: &instrlst_vt
  , loc: loc_t
  , tmp_res: tmpvar_t
  , lin: int
  , hit_body: hityp_t
  , vp_clo: valprim
  ) : void
fun instr_add_move_lazy_force (
    res: &instrlst_vt
  , loc: loc_t
  , tmp_res: tmpvar_t
  , lin: int
  , hit_elt: hityp_t
  , vp_lazy: valprim
  ) : void
fun instr_add_move_rec (
    res: &instrlst_vt
  , loc: loc_t
  , tmp_res: tmpvar_t
  , recknd: int
  , hit_sum: hityp_t
  , lvps: labvalprimlst
  ) : void
fun instr_add_move_ref (
  res: &instrlst_vt, loc: loc_t, tmp_res: tmpvar_t, vp_val: valprim
): void 
fun instr_add_move_val (
  res: &instrlst_vt, loc: loc_t, tmp_res: tmpvar_t, vp_val: valprim
) : void 
fun instr_add_raise (
  res: &instrlst_vt, loc: loc_t, tmp_res: tmpvar_t, vp_exn: valprim
) : void 
fun instr_add_select (
  res: &instrlst_vt
, loc: loc_t, tmp_res: tmpvar_t, vp: valprim, offs: offsetlst
) : void 
fun instr_add_selcon (
  res: &instrlst_vt
, loc: loc_t, tmp_res: tmpvar_t, vp: valprim, hit: hityp_t, i: int
) : void 
fun instr_add_selcon_ptr (
  res: &instrlst_vt
, loc: loc_t, tmp_res: tmpvar_t, vp: valprim, hit: hityp_t, i: int
) : void 
fun instr_add_store_ptr_offs (
  res: &instrlst_vt
, loc: loc_t, vp_ptr: valprim, offs: offsetlst, vp_val: valprim
) : void 
fun instr_add_store_var_offs (
  res: &instrlst_vt
, loc: loc_t, vp_mut: valprim, offs: offsetlst, vp_val: valprim
) : void 
fun instr_add_switch
  (res: &instrlst_vt, loc: loc_t, brs: branchlst): void
fun instr_add_tmplabint
  (res: &instrlst_vt, loc: loc_t, tl: tmplab_t, i: int): void
fun instr_add_trywith (
    res: &instrlst_vt
  , loc: loc_t
  , res_try: instrlst
  , tmp_exn: tmpvar_t
  , brs: branchlst
  ) : void 
fun instr_add_vardec
  (res: &instrlst_vt, loc: loc_t, tmp: tmpvar_t): void
fun instr_add_valprimlst_free (res: &instrlst_vt, loc: loc_t): void
fun emit_label {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, l: $Lab.label_t): void
fun emit_labelext {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, isext: bool, l: $Lab.label_t): void
fun emit_filename {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, fil: $Fil.filename_t): void
  = "atsccomp_emit_filename"
fun emit_d2con {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, d2c: d2con_t): void
fun emit_d2cst {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, d2c: d2cst_t): void
fun emit_funlab {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, fl: funlab_t): void
fun emit_tmplab {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, tl: tmplab_t): void
fun emit_tmplabint {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, tl: tmplab_t, i: int): void
fun emit_tmpvar {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, tmp: tmpvar_t): void
fun emit_hityp {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, hit: hityp_t): void
fun emit_hityp_ptr {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, hit: hityp_t): void
fun emit_hityplst_sep {m:file_mode} (   pf: file_mode_lte (m, w) | out: &FILE m, _arg: hityplst_t, sep: string
) : void 
fun emit_valprim_tmpvar {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, tmp: tmpvar_t): void
fun emit_valprim {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, vp: valprim): void
fun emit_valprimlst {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, vps: valprimlst): void
fun emit_instr {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, ins: instr): void
fun emit_instrlst {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, inss: instrlst): void
absviewtype tmpvarmap_vt
fun tmpvarmap_nil (): tmpvarmap_vt
fun tmpvarmap_free (tmps: tmpvarmap_vt): void
fun instr_tmpvarmap_add (tmps: &tmpvarmap_vt, ins: instr): void
fun instrlst_tmpvarmap_add (tmps: &tmpvarmap_vt, inss: instrlst): void
fun funentry_tmpvarmap_add (tmps: &tmpvarmap_vt, entry: funentry_t): void
datatype tailjoinlst =
  | TAILJOINLSTcons of (int, funlab_t, tmpvarlst, tailjoinlst)
  | TAILJOINLSTnil
fun tailjoinlst_tmpvarmap_add (tmps: &tmpvarmap_vt, tjs: tailjoinlst): void
fun emit_tailjoinlst {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, tjs: tailjoinlst): void
fun emit_tmpvarmap_dec_local {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, tmps: !tmpvarmap_vt): int
fun emit_tmpvarmap_dec_static {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, tmps: !tmpvarmap_vt): int
fun emit_tmpvarmap_markroot {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, tmps: !tmpvarmap_vt): int
fun emit_funentry {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, entry: funentry_t): void
fun emit_funentry_prototype {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, entry: funentry_t): void
fun emit_mainfun {m:file_mode}
  (pf: file_mode_lte (m, w) | out: &FILE m, fil: fil_t): void
fun ccomp_patck (
  res: &instrlst_vt, vp: valprim, hip: hipat, fail: kont
) : void
fun ccomp_match (
  res: &instrlst_vt, level: int, vp: valprim, hip0: hipat
) : void
fun ccomp_exp_arg_body_funlab (
  loc_fun: loc_t
, prolog: instrlst
, hips_arg: hipatlst, hie_body: hiexp
, fl: funlab_t
) : funentry_t 
fun ccomp_exp (res: &instrlst_vt, hie0: hiexp): valprim
fun ccomp_explst (res: &instrlst_vt, hies: hiexplst): valprimlst
fun ccomp_exp_tmpvar
  (res: &instrlst_vt, hie0: hiexp, tmp: tmpvar_t): void
fun tmpnamtbl_add (fullname: string, vp_funclo: valprim): void
fun tmpnamtbl_find (fullname: string): Option_vt (valprim)
fun template_name_make (basename: string, hitss: hityplstlst_t): string
fun template_cst_name_make (d2c: d2cst_t, hitss: hityplstlst_t): string
fun template_var_name_make (d2v: d2var_t, hitss: hityplstlst_t): string
fun ccomp_exp_template_cst (
  res: &instrlst_vt, loc: loc_t, hit0: hityp_t, d2c: d2cst_t, hitss: hityplstlst
) : valprim 
fun ccomp_exp_template_var (
  res: &instrlst_vt, loc: loc_t, hit0: hityp_t, d2v: d2var_t, hitss: hityplstlst
) : valprim 
fun ccomp_hiclaulst (
    level: int
  , vps: valprimlst
  , hicls: hiclaulst
  , tmp_res: tmpvar_t
  , fail: kont
  ) : branchlst
fun ccomp_tailjoin_funentrylst (loc_all: loc_t, fs: funentrylst): void
fun ccomp_declst (res: &instrlst_vt, hids: hideclst): void
fun ccomp_main
  {m:file_mode} (
    pf: file_mode_lte (m, w)
  | flag: int
  , out: &FILE m
  , fil: fil_t
  , hids: hideclst
  ) : void