Js_of_ocaml_compiler.Code
module Addr : sig ... end
module DebugAddr : sig ... end
module Var : sig ... end
module Native_string : sig ... end
type constant =
| String of string
| NativeString of Native_string.t
| Float of float
| Float_array of float array
| Int of Targetint.t
| Int32 of Stdlib.Int32.t
Only produced when compiling to WebAssembly.
*)| Int64 of Stdlib.Int64.t
| NativeInt of Stdlib.Int32.t
Only produced when compiling to WebAssembly.
*)| Tuple of int * constant array * array_or_not
module Constant : sig ... end
val noloc : loc
val location_of_pc : int -> loc
type expr =
| Apply of {
}
| Block of int * Var.t array * array_or_not * mutability
| Field of Var.t * int * field_type
| Closure of Var.t list * cont
| Constant of constant
| Prim of prim * prim_arg list
| Special of special
module Print : sig ... end
fold_closures p f init
folds f
over all closures in the program p
, starting from the initial value init
. For each closure, f
is called with the following arguments: the closure name (enclosed in Stdlib.Some
), its parameter list, the address and parameter instantiation of its first block, and the current accumulator. In addition, f
is called on the initial block p.start
, with None
as the closure name. All closures in all blocks of p
are included in the fold, not only the ones reachable from p.start
.
val fold_closures_innermost_first :
program ->
(Var.t option -> Var.t list -> cont -> 'd -> 'd) ->
'd ->
'd
Similar to fold_closures
, but applies the fold function to the innermost closures first. Unlike with fold_closures
, only the closures reachable from p.start
are considered.
val fold_closures_outermost_first :
program ->
(Var.t option -> Var.t list -> cont -> 'd -> 'd) ->
'd ->
'd
Similar to fold_closures
, but applies the fold function to the outermost closures first. Unlike with fold_closures
, only the closures reachable from p.start
are considered.
val fold_children : 'c fold_blocs
val fold_children_skip_try_body : 'c fold_blocs
val traverse :
fold_blocs_poly ->
(Addr.t -> 'c -> 'c) ->
Addr.t ->
block Addr.Map.t ->
'c ->
'c
val preorder_traverse :
fold_blocs_poly ->
(Addr.t -> 'c -> 'c) ->
Addr.t ->
block Addr.Map.t ->
'c ->
'c
val empty : program
val is_empty : program -> bool
val invariant : program -> unit