Module Js_of_ocaml_compiler.Code
module Addr : sig ... end
module DebugAddr : sig ... end
module Var : sig ... end
type cont
= Addr.t * Var.t list
type prim
=
|
Vectlength
|
Array_get
|
Extern of string
|
Not
|
IsInt
|
Eq
|
Neq
|
Lt
|
Le
|
Ult
type array_or_not
=
|
Array
|
NotArray
|
Unknown
type constant
=
|
String of string
|
IString of string
|
Float of float
|
Float_array of float array
|
Int64 of int64
|
Tuple of int * constant array * array_or_not
|
Int of int32
type prim_arg
=
|
Pv of Var.t
|
Pc of constant
type expr
=
|
Apply of Var.t * Var.t list * bool
|
Block of int * Var.t array * array_or_not
|
Field of Var.t * int
|
Closure of Var.t list * cont
|
Constant of constant
|
Prim of prim * prim_arg list
type instr
=
|
Let of Var.t * expr
|
Set_field of Var.t * int * Var.t
|
Offset_ref of Var.t * int
|
Array_set of Var.t * Var.t * Var.t
type last
=
|
Return of Var.t
|
Raise of Var.t * [ `Normal | `Notrace | `Reraise ]
|
Stop
|
Branch of cont
|
Cond of Var.t * cont * cont
|
Switch of Var.t * cont array * cont array
|
Pushtrap of cont * Var.t * cont * Addr.Set.t
|
Poptrap of cont * Addr.t
type block
=
{
params : Var.t list;
handler : (Var.t * cont) option;
body : instr list;
branch : last;
}
type program
=
{
start : Addr.t;
blocks : block Addr.Map.t;
free_pc : Addr.t;
}
module Print : sig ... end
type 'c fold_blocs
= block Addr.Map.t -> Addr.t -> (Addr.t -> 'c -> 'c) -> 'c -> 'c
type fold_blocs_poly
=
{
fold : a. 'a fold_blocs;
}
val fold_closures : program -> (Var.t option -> Var.t list -> cont -> 'd -> 'd) -> 'd -> 'd
val fold_children : 'c fold_blocs
val traverse : fold_blocs_poly -> (Addr.t -> 'c -> 'c) -> Addr.t -> block Addr.Map.t -> 'c -> 'c
val prepend : program -> instr list -> program
val empty : program
val eq : program -> program -> bool
val invariant : program -> unit