Lambdatype primitive = | Pbytes_to_string| Pbytes_of_string| Pignore| Pgetglobal of Ident.t| Psetglobal of Ident.t| Pmakeblock of int * Asttypes.mutable_flag * block_shape| Pfield of int * immediate_or_pointer * Asttypes.mutable_flag| Pfield_computed| Psetfield of int * immediate_or_pointer * initialization_or_assignment| Psetfield_computed of immediate_or_pointer * initialization_or_assignment| Pfloatfield of int| Psetfloatfield of int * initialization_or_assignment| Pduprecord of Types.record_representation * int| Prunstack| Pperform| Presume| Preperform| Pccall of Primitive.description| Praise of raise_kind| Psequand| Psequor| Pnot| Pnegint| Paddint| Psubint| Pmulint| Pdivint of is_safe| Pmodint of is_safe| Pandint| Porint| Pxorint| Plslint| Plsrint| Pasrint| Pintcomp of integer_comparison| Pcompare_ints| Pcompare_floats| Pcompare_bints of boxed_integer| Poffsetint of int| Poffsetref of int| Pintoffloat| Pfloatofint| Pnegfloat| Pabsfloat| Paddfloat| Psubfloat| Pmulfloat| Pdivfloat| Pfloatcomp of float_comparison| Pstringlength| Pstringrefu| Pstringrefs| Pbyteslength| Pbytesrefu| Pbytessetu| Pbytesrefs| Pbytessets| Pmakearray of array_kind * Asttypes.mutable_flag| Pduparray of array_kind * Asttypes.mutable_flagFor Pduparray, the argument must be an immutable array. The arguments of Pduparray give the kind and mutability of the array being *produced* by the duplication.
| Parraylength of array_kind| Parrayrefu of array_kind| Parraysetu of array_kind| Parrayrefs of array_kind| Parraysets of array_kind| Pisint| Pisout| Pbintofint of boxed_integer| Pintofbint of boxed_integer| Pcvtbint of boxed_integer * boxed_integer| Pnegbint of boxed_integer| Paddbint of boxed_integer| Psubbint of boxed_integer| Pmulbint of boxed_integer| Pdivbint of {size : boxed_integer;is_safe : is_safe;}| Pmodbint of {size : boxed_integer;is_safe : is_safe;}| Pandbint of boxed_integer| Porbint of boxed_integer| Pxorbint of boxed_integer| Plslbint of boxed_integer| Plsrbint of boxed_integer| Pasrbint of boxed_integer| Pbintcomp of boxed_integer * integer_comparison| Pbigarrayref of bool * int * bigarray_kind * bigarray_layout| Pbigarrayset of bool * int * bigarray_kind * bigarray_layout| Pbigarraydim of int| Pstring_load_16 of bool| Pstring_load_32 of bool| Pstring_load_64 of bool| Pbytes_load_16 of bool| Pbytes_load_32 of bool| Pbytes_load_64 of bool| Pbytes_set_16 of bool| Pbytes_set_32 of bool| Pbytes_set_64 of bool| Pbigstring_load_16 of bool| Pbigstring_load_32 of bool| Pbigstring_load_64 of bool| Pbigstring_set_16 of bool| Pbigstring_set_32 of bool| Pbigstring_set_64 of bool| Pctconst of compile_time_constant| Pbswap16| Pbbswap of boxed_integer| Pint_as_pointer| Patomic_load of {immediate_or_pointer : immediate_or_pointer;}| Patomic_exchange| Patomic_cas| Patomic_fetch_add| Popaque| Pdls_get| Ppolland block_shape = value_kind list optionval equal_value_kind : value_kind -> value_kind -> boolval equal_boxed_integer : boxed_integer -> boxed_integer -> booltype structured_constant = | Const_base of Asttypes.constant| Const_block of int * structured_constant list| Const_float_array of string list| Const_immstring of stringval equal_inline_attribute : inline_attribute -> inline_attribute -> boolval equal_specialise_attribute :
specialise_attribute ->
specialise_attribute ->
booltype function_attribute = {inline : inline_attribute;specialise : specialise_attribute;local : local_attribute;poll : poll_attribute;is_a_functor : bool;stub : bool;tmc_candidate : bool;may_fuse_arity : bool;}type scoped_location = Debuginfo.Scoped_location.ttype lambda = | Lvar of Ident.t| Lmutvar of Ident.t| Lconst of structured_constant| Lapply of lambda_apply| Lfunction of lfunction| Llet of let_kind * value_kind * Ident.t * lambda * lambda| Lmutlet of value_kind * Ident.t * lambda * lambda| Lletrec of rec_binding list * lambda| Lprim of primitive * lambda list * scoped_location| Lswitch of lambda * lambda_switch * scoped_location| Lstringswitch of lambda
* (string * lambda) list
* lambda option
* scoped_location| Lstaticraise of int * lambda list| Lstaticcatch of lambda * int * (Ident.t * value_kind) list * lambda| Ltrywith of lambda * Ident.t * lambda| Lifthenelse of lambda * lambda * lambda| Lsequence of lambda * lambda| Lwhile of lambda * lambda| Lfor of Ident.t * lambda * lambda * Asttypes.direction_flag * lambda| Lassign of Ident.t * lambda| Lsend of meth_kind * lambda * lambda * lambda list * scoped_location| Levent of lambda * lambda_event| Lifused of Ident.t * lambdaand lfunction = private {kind : function_kind;params : (Ident.t * value_kind) list;return : value_kind;body : lambda;attr : function_attribute;loc : scoped_location;}and lambda_apply = {ap_func : lambda;ap_args : lambda list;ap_loc : scoped_location;ap_tailcall : tailcall_attribute;ap_inlined : inline_attribute;ap_specialised : specialise_attribute;}and lambda_event = {lev_loc : scoped_location;lev_kind : lambda_event_kind;lev_repr : int ref option;lev_env : Env.t;}type program = {module_ident : Ident.t;main_module_block_size : int;required_globals : Ident.Set.t;code : lambda;}val const_unit : structured_constantval const_int : int -> structured_constantval lambda_unit : lambdaval dummy_constant : lambdadummy_constant produces a plecholder value with a recognizable bit pattern (currently 0xBBBB in its tagged form)
val lfunction :
kind:function_kind ->
params:(Ident.t * value_kind) list ->
return:value_kind ->
body:lambda ->
attr:function_attribute ->
loc:scoped_location ->
lambdaval lfunction' :
kind:function_kind ->
params:(Ident.t * value_kind) list ->
return:value_kind ->
body:lambda ->
attr:function_attribute ->
loc:scoped_location ->
lfunctioniter_head_constructor f lam apply f to only the first level of sub expressions of lam. It does not recursively traverse the expression.
Same as iter_head_constructor, but use a different callback for sub-terms which are in tail position or not.
val transl_prim : string -> string -> lambdaTranslate a value from a persistent module. For instance:
transl_internal_value "CamlinternalLazy" "force"val is_evaluated : lambda -> boolis_evaluated lam returns true if lam is either a constant, a variable or a function abstract.
val free_variables : lambda -> Ident.Set.tval transl_module_path : scoped_location -> Env.t -> Path.t -> lambdaval transl_value_path : scoped_location -> Env.t -> Path.t -> lambdaval transl_extension_path : scoped_location -> Env.t -> Path.t -> lambdaval transl_class_path : scoped_location -> Env.t -> Path.t -> lambdaval subst :
(Ident.t -> Types.value_description -> Env.t -> Env.t) ->
?freshen_bound_variables:bool ->
lambda Ident.Map.t ->
lambda ->
lambdasubst update_env ?freshen_bound_variables s lt applies a substitution s to the lambda-term lt.
Assumes that the image of the substitution is out of reach of the bound variables of the lambda-term (no capture).
update_env is used to refresh the environment contained in debug events.
freshen_bound_variables, which defaults to false, freshens the bound variables within lt.
val rename : Ident.t Ident.Map.t -> lambda -> lambdaA version of subst specialized for the case where we're just renaming idents.
Duplicate a term, freshening all locally-bound identifiers.
Bottom-up rewriting, applying the function on each node from the leaves to the root.
Apply the given transformation on the function's body
Rewrite each immediate sub-term with the function.
val negate_integer_comparison : integer_comparison -> integer_comparisonval swap_integer_comparison : integer_comparison -> integer_comparisonval negate_float_comparison : float_comparison -> float_comparisonval swap_float_comparison : float_comparison -> float_comparisonval default_function_attribute : function_attributeval default_stub_attribute : function_attributeval function_is_curried : lfunction -> boolval find_exact_application :
function_kind ->
arity:int ->
lambda list ->
lambda list optionMaximal number of parameters for a function, or in other words, maximal length of the params list of a lfunction record. This is unlimited (max_int) for bytecode, but limited (currently to 126) for native code.
val staticfail : lambdaval is_guarded : lambda -> boolval raise_kind : raise_kind -> stringval merge_inline_attributes :
inline_attribute ->
inline_attribute ->
inline_attribute option