Module Js_of_ocaml_compiler.Global_flow

type def =
  1. | Expr of Code.expr
  2. | Phi of {
    1. known : Js_of_ocaml_compiler.Code.Var.Set.t;
    2. others : bool;
    3. unit : bool;
    }
type approx =
  1. | Top
  2. | Values of {
    1. known : Js_of_ocaml_compiler.Code.Var.Set.t;
    2. others : bool;
    }
type escape_status =
  1. | Escape
  2. | Escape_constant
  3. | No
type info = {
  1. info_defs : def array;
  2. info_approximation : approx Code.Var.Tbl.t;
  3. info_may_escape : Code.Var.ISet.t;
  4. info_variable_may_escape : escape_status array;
  5. info_return_vals : Js_of_ocaml_compiler.Code.Var.Set.t Js_of_ocaml_compiler.Code.Var.Map.t;
}
type mutable_fields =
  1. | No_field
  2. | Some_fields of Stdlib.IntSet.t
  3. | All_fields
module VarPairTbl : Stdlib.Hashtbl.S with type key = Js_of_ocaml_compiler.Code.Var.t * Js_of_ocaml_compiler.Code.Var.t
type state = {
  1. vars : Code.Var.ISet.t;
  2. deps : Code.Var.t list Code.Var.Tbl.t;
  3. defs : def array;
  4. variable_may_escape : escape_status array;
  5. variable_mutable_fields : mutable_fields array;
  6. may_escape : escape_status array;
  7. mutable_fields : mutable_fields array;
  8. return_values : Js_of_ocaml_compiler.Code.Var.Set.t Js_of_ocaml_compiler.Code.Var.Map.t;
  9. functions_from_returned_value : Code.Var.t list Js_of_ocaml_compiler.Code.Var.Hashtbl.t;
  10. known_cases : int list Js_of_ocaml_compiler.Code.Var.Hashtbl.t;
  11. applied_functions : unit VarPairTbl.t;
  12. function_call_sites : Code.Var.t list Js_of_ocaml_compiler.Code.Var.Hashtbl.t;
  13. fast : bool;
}
val f : fast:bool -> Code.program -> state * info
val update_def : info -> Code.Var.t -> Code.expr -> unit
val exact_call : info -> Code.Var.t -> int -> bool
val get_unique_closure : info -> Code.Var.t -> (Code.Var.t * Code.Var.t list) option
val function_arity : info -> Code.Var.t -> int option