2 module Sym = Tiger_symbol
3 module Translate = Tiger_translate
4 module Type = Tiger_env_type
5 module Value = Tiger_env_value
11 ; level : Translate.Level.t
15 { typs = Type.built_in
16 ; vals = Value.built_in
18 ; level = Translate.Level.init
21 let get_typ {typs; _} k =
24 let get_val {vals; _} k =
28 {t with typs = Map.set t.typs ~k ~v}
31 {t with vals = Map.set t.vals ~k ~v}
34 let loop = Sym.unique_of_string "loop" in
35 let t = {t with loop = Some loop} in
38 let loop_end t given =
42 | Some current when (not (Sym.is_equal current given)) ->
47 let loop_current {loop; _} =
50 let level_set t level =
53 let level_get {level; _} =