Module Llvm_ir.Generator_state

Copyright 2025-2026, Victoria Ostrovskaya & Danil Usoltsev

SPDX-License-Identifier: LGPL-3.0-or-later

module type NAMING = sig ... end
module Make (N : NAMING) : sig ... end
include sig ... end
type state = Make(Default_naming).state = {
  1. value_env : (string, Llvm.llvalue, Base.String.comparator_witness) Base.Map.t;
  2. type_env : (string, Llvm.lltype, Base.String.comparator_witness) Base.Map.t;
  3. current_module : Llvm.llmodule;
  4. gc_allocas : (string, Llvm.llvalue, Base.String.comparator_witness) Base.Map.t option;
  5. gc_entry_block : Llvm.llbasicblock option;
  6. naming_state : Default_naming.t;
  7. resolve : (int -> string -> (string * int) option) option;
  8. current_func_index : int;
}
type !'a t = state -> ('a * state, string) Stdlib.Result.t
val return : 'a -> 'a t
val bind : 'a t -> ('a -> 'b t) -> 'b t
val (let*) : 'a t -> ('a -> 'b t) -> 'b t
val get : state t
val put : state -> unit t
val modify : (state -> state) -> unit t
val fail : string -> 'a t
val map_find_opt : (string, 'a, 'cmp) Base.Map.t -> string -> 'a option
val find_value_opt : string -> Llvm.llvalue option t
val find_type_opt : string -> Llvm.lltype option t
val resolved_find_value_opt : string -> Llvm.llvalue option t
val resolved_find_type_opt : string -> Llvm.lltype option t
val set_value : string -> Llvm.llvalue -> unit t
val set_type : string -> Llvm.lltype -> unit t
val remove_value : string -> unit t
val get_gc_allocas : (string, Llvm.llvalue, Base.String.comparator_witness) Base.Map.t option t
val set_gc_allocas : (string, Llvm.llvalue, Base.String.comparator_witness) Base.Map.t option -> unit t
val get_gc_entry_block : Llvm.llbasicblock option t
val set_gc_entry_block : Llvm.llbasicblock option -> unit t
val fresh_blocks : (string * string * string) t
val run : 'a t -> state -> ('a * state, string) Stdlib.Result.t