package ppxlib
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=d9d959fc9f84260487e45684dc741898a92fc5506b61a7f5cac65d21832db925
sha512=e428b1e3b89261c7efdaa18016264d1afbf067cb9b0d41124b04796c2487ac7ca8ee9a24a60d56f20d1774cb44aaa9ecf1512f17455812ba8d62d4ef93616ee7
doc/ppxlib/Ppxlib/Ast_builder/Default/index.html
Module Ast_builder.Default
Source
Helpers taking a ~loc
argument. This module is meant to be opened or aliased.
Value description
val value_description :
loc:Location.t ->
name:string Astlib.Location.loc ->
type_:Astlib.Ast_500.Parsetree.core_type ->
prim:string list ->
Astlib.Ast_500.Parsetree.value_description
value_description
constructs an Ast.value_description
Example OCaml
Values of type value_description
represents:
Value binding
val value_binding :
loc:Location.t ->
pat:Astlib.Ast_500.Parsetree.pattern ->
expr:Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.value_binding
value_binding
constructs an Ast.value_binding
Type extension
val type_extension :
loc:Location.t ->
path:Astlib.Longident.t Astlib.Location.loc ->
params:
(Astlib.Ast_500.Parsetree.core_type
* (Astlib.Ast_500.Asttypes.variance * Astlib.Ast_500.Asttypes.injectivity))
list ->
constructors:Astlib.Ast_500.Parsetree.extension_constructor list ->
private_:Astlib.Ast_500.Asttypes.private_flag ->
Astlib.Ast_500.Parsetree.type_extension
type_extension
constructs an Ast.type_extension
Example OCaml
Definition of new extensions constructors for the extensive sum type t
(type t += ...
).
Type exception
val type_exception :
loc:Location.t ->
Astlib.Ast_500.Parsetree.extension_constructor ->
Astlib.Ast_500.Parsetree.type_exception
type_exception
constructs an Ast.type_exception
Example OCaml
Definition of a new exception (exception E
).
Type declaration
val type_declaration :
loc:Location.t ->
name:string Astlib.Location.loc ->
params:
(Astlib.Ast_500.Parsetree.core_type
* (Astlib.Ast_500.Asttypes.variance * Astlib.Ast_500.Asttypes.injectivity))
list ->
cstrs:
(Astlib.Ast_500.Parsetree.core_type
* Astlib.Ast_500.Parsetree.core_type
* Astlib.Location.t)
list ->
kind:Astlib.Ast_500.Parsetree.type_kind ->
private_:Astlib.Ast_500.Asttypes.private_flag ->
manifest:Astlib.Ast_500.Parsetree.core_type option ->
Astlib.Ast_500.Parsetree.type_declaration
type_declaration
constructs an Ast.type_declaration
Example OCaml
Here are type declarations and their representation, for various ptype_kind
and ptype_manifest
values:
type t
whentype_kind
isPtype_abstract
, andmanifest
isNone
,type t = T0
whentype_kind
isPtype_abstract
, andmanifest
isSome T0
,type t = C of T | ...
whentype_kind
isPtype_variant
, andmanifest
isNone
,type t = T0 = C of T | ...
whentype_kind
isPtype_variant
, andmanifest
isSome T0
,type t = {l: T; ...}
whentype_kind
isPtype_record
, andmanifest
isNone
,type t = T0 = {l : T; ...}
whentype_kind
isPtype_record
, andmanifest
isSome T0
,type t = ..
whentype_kind
isPtype_open
, andmanifest
isNone
.
Toplevel directive
val toplevel_directive :
loc:Location.t ->
name:string Astlib.Location.loc ->
arg:Astlib.Ast_500.Parsetree.directive_argument option ->
Astlib.Ast_500.Parsetree.toplevel_directive
toplevel_directive
constructs an Ast.toplevel_directive
Structure item
val pstr_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
Astlib.Ast_500.Parsetree.attribute list ->
Astlib.Ast_500.Parsetree.structure_item
val pstr_attribute :
loc:Location.t ->
Astlib.Ast_500.Parsetree.attribute ->
Astlib.Ast_500.Parsetree.structure_item
val pstr_class_type :
loc:Location.t ->
Astlib.Ast_500.Parsetree.class_type Astlib.Ast_500.Parsetree.class_infos list ->
Astlib.Ast_500.Parsetree.structure_item
pstr_class_type
constructs an Ast.structure_item_desc.Pstr_class_type
Example OCaml
class type ct1 = ... and ... and ctn = ...
val pstr_class :
loc:Location.t ->
Astlib.Ast_500.Parsetree.class_expr Astlib.Ast_500.Parsetree.class_infos list ->
Astlib.Ast_500.Parsetree.structure_item
pstr_class
constructs an Ast.structure_item_desc.Pstr_class
Example OCaml
class c1 = ... and ... and cn = ...
val pstr_modtype :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_type_declaration ->
Astlib.Ast_500.Parsetree.structure_item
val pstr_recmodule :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_binding list ->
Astlib.Ast_500.Parsetree.structure_item
pstr_recmodule
constructs an Ast.structure_item_desc.Pstr_recmodule
Example OCaml
module rec X1 = ME1 and ... and Xn = MEn
val pstr_module :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_binding ->
Astlib.Ast_500.Parsetree.structure_item
val pstr_exception :
loc:Location.t ->
Astlib.Ast_500.Parsetree.type_exception ->
Astlib.Ast_500.Parsetree.structure_item
pstr_exception
constructs an Ast.structure_item_desc.Pstr_exception
Example OCaml
exception C of T
exception C = M.X
val pstr_typext :
loc:Location.t ->
Astlib.Ast_500.Parsetree.type_extension ->
Astlib.Ast_500.Parsetree.structure_item
val pstr_type :
loc:Location.t ->
Astlib.Ast_500.Asttypes.rec_flag ->
Astlib.Ast_500.Parsetree.type_declaration list ->
Astlib.Ast_500.Parsetree.structure_item
pstr_type
constructs an Ast.structure_item_desc.Pstr_type
Example OCaml
type t1 = ... and ... and tn = ...
val pstr_primitive :
loc:Location.t ->
Astlib.Ast_500.Parsetree.value_description ->
Astlib.Ast_500.Parsetree.structure_item
pstr_primitive
constructs an Ast.structure_item_desc.Pstr_primitive
Example OCaml
val x: T
external x: T = "s1" ... "sn"
val pstr_value :
loc:Location.t ->
Astlib.Ast_500.Asttypes.rec_flag ->
Astlib.Ast_500.Parsetree.value_binding list ->
Astlib.Ast_500.Parsetree.structure_item
pstr_value
constructs an Ast.structure_item_desc.Pstr_value
Example OCaml
Pstr_value(rec, [(P1, E1 ; ... ; (Pn, En))])
represents:
let P1 = E1 and ... and Pn = EN
whenrec
isNonrecursive
,let rec P1 = E1 and ... and Pn = EN
whenrec
isRecursive
.
val pstr_eval :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.attribute list ->
Astlib.Ast_500.Parsetree.structure_item
Signature item
val psig_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
Astlib.Ast_500.Parsetree.attribute list ->
Astlib.Ast_500.Parsetree.signature_item
val psig_attribute :
loc:Location.t ->
Astlib.Ast_500.Parsetree.attribute ->
Astlib.Ast_500.Parsetree.signature_item
val psig_class_type :
loc:Location.t ->
Astlib.Ast_500.Parsetree.class_type Astlib.Ast_500.Parsetree.class_infos list ->
Astlib.Ast_500.Parsetree.signature_item
psig_class_type
constructs an Ast.signature_item_desc.Psig_class_type
Example OCaml
class type ct1 = ... and ... and ctn = ...
val psig_class :
loc:Location.t ->
Astlib.Ast_500.Parsetree.class_type Astlib.Ast_500.Parsetree.class_infos list ->
Astlib.Ast_500.Parsetree.signature_item
psig_class
constructs an Ast.signature_item_desc.Psig_class
Example OCaml
class c1 : ... and ... and cn : ...
val psig_modtypesubst :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_type_declaration ->
Astlib.Ast_500.Parsetree.signature_item
psig_modtypesubst
constructs an Ast.signature_item_desc.Psig_modtypesubst
Example OCaml
module type S := ...
val psig_modtype :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_type_declaration ->
Astlib.Ast_500.Parsetree.signature_item
psig_modtype
constructs an Ast.signature_item_desc.Psig_modtype
Example OCaml
module type S = MT
and module type S
val psig_recmodule :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_declaration list ->
Astlib.Ast_500.Parsetree.signature_item
psig_recmodule
constructs an Ast.signature_item_desc.Psig_recmodule
Example OCaml
module rec X1 : MT1 and ... and Xn : MTn
val psig_modsubst :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_substitution ->
Astlib.Ast_500.Parsetree.signature_item
val psig_module :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_declaration ->
Astlib.Ast_500.Parsetree.signature_item
psig_module
constructs an Ast.signature_item_desc.Psig_module
Example OCaml
module X = M
and module X : MT
val psig_exception :
loc:Location.t ->
Astlib.Ast_500.Parsetree.type_exception ->
Astlib.Ast_500.Parsetree.signature_item
val psig_typext :
loc:Location.t ->
Astlib.Ast_500.Parsetree.type_extension ->
Astlib.Ast_500.Parsetree.signature_item
val psig_typesubst :
loc:Location.t ->
Astlib.Ast_500.Parsetree.type_declaration list ->
Astlib.Ast_500.Parsetree.signature_item
psig_typesubst
constructs an Ast.signature_item_desc.Psig_typesubst
Example OCaml
type t1 := ... and ... and tn := ...
val psig_type :
loc:Location.t ->
Astlib.Ast_500.Asttypes.rec_flag ->
Astlib.Ast_500.Parsetree.type_declaration list ->
Astlib.Ast_500.Parsetree.signature_item
psig_type
constructs an Ast.signature_item_desc.Psig_type
Example OCaml
type t1 = ... and ... and tn = ...
val psig_value :
loc:Location.t ->
Astlib.Ast_500.Parsetree.value_description ->
Astlib.Ast_500.Parsetree.signature_item
psig_value
constructs an Ast.signature_item_desc.Psig_value
Example OCaml
val x: T
external x: T = "s1" ... "sn"
Row field
val rinherit :
loc:Location.t ->
Astlib.Ast_500.Parsetree.core_type ->
Astlib.Ast_500.Parsetree.row_field
val rtag :
loc:Location.t ->
string Astlib.Location.loc ->
bool ->
Astlib.Ast_500.Parsetree.core_type list ->
Astlib.Ast_500.Parsetree.row_field
rtag
constructs an Ast.row_field_desc.Rtag
Example OCaml
Rtag(`A, b, l)
represents:
`A
whenb
istrue
andl
is[]
,`A of T
whenb
isfalse
andl
is[T]
,`A of T1 & .. & Tn
whenb
isfalse
andl
is[T1;...Tn]
,`A of & T1 & .. & Tn
whenb
istrue
andl
is[T1;...Tn]
.
- The
bool
field is true if the tag contains a constant (empty) constructor. &
occurs when several types are used for the same constructor (see 4.2 in the manual)
Position
position
constructs an Ast.position
Pattern
val ppat_open :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.pattern ->
Astlib.Ast_500.Parsetree.pattern
val ppat_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
Astlib.Ast_500.Parsetree.pattern
val ppat_exception :
loc:Location.t ->
Astlib.Ast_500.Parsetree.pattern ->
Astlib.Ast_500.Parsetree.pattern
val ppat_unpack :
loc:Location.t ->
string option Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.pattern
ppat_unpack
constructs an Ast.pattern_desc.Ppat_unpack
Example OCaml
Ppat_unpack(s)
represents:
(module P)
whens
isSome "P"
(module _)
whens
isNone
Note: (module P : S)
is represented as Ppat_constraint(Ppat_unpack(Some "P"), Ptyp_package S)
val ppat_lazy :
loc:Location.t ->
Astlib.Ast_500.Parsetree.pattern ->
Astlib.Ast_500.Parsetree.pattern
val ppat_type :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.pattern
val ppat_constraint :
loc:Location.t ->
Astlib.Ast_500.Parsetree.pattern ->
Astlib.Ast_500.Parsetree.core_type ->
Astlib.Ast_500.Parsetree.pattern
val ppat_or :
loc:Location.t ->
Astlib.Ast_500.Parsetree.pattern ->
Astlib.Ast_500.Parsetree.pattern ->
Astlib.Ast_500.Parsetree.pattern
val ppat_array :
loc:Location.t ->
Astlib.Ast_500.Parsetree.pattern list ->
Astlib.Ast_500.Parsetree.pattern
val ppat_record :
loc:Location.t ->
(Astlib.Longident.t Astlib.Location.loc * Astlib.Ast_500.Parsetree.pattern)
list ->
Astlib.Ast_500.Asttypes.closed_flag ->
Astlib.Ast_500.Parsetree.pattern
ppat_record
constructs an Ast.pattern_desc.Ppat_record
Example OCaml
Ppat_record([(l1, P1) ; ... ; (ln, Pn)], flag)
represents:
Invariant: n > 0
val ppat_variant :
loc:Location.t ->
string ->
Astlib.Ast_500.Parsetree.pattern option ->
Astlib.Ast_500.Parsetree.pattern
ppat_variant
constructs an Ast.pattern_desc.Ppat_variant
Example OCaml
Ppat_variant(`A, pat)
represents:
`A
whenpat
isNone
,`A P
whenpat
isSome P
val ppat_tuple :
loc:Location.t ->
Astlib.Ast_500.Parsetree.pattern list ->
Astlib.Ast_500.Parsetree.pattern
ppat_tuple
constructs an Ast.pattern_desc.Ppat_tuple
Example OCaml
Patterns (P1, ..., Pn)
.
Invariant: n >= 2
val ppat_interval :
loc:Location.t ->
Astlib.Ast_500.Parsetree.constant ->
Astlib.Ast_500.Parsetree.constant ->
Astlib.Ast_500.Parsetree.pattern
ppat_interval
constructs an Ast.pattern_desc.Ppat_interval
Example OCaml
Patterns such as 'a'..'z'
.
Other forms of interval are recognized by the parser but rejected by the type-checker.
val ppat_constant :
loc:Location.t ->
Astlib.Ast_500.Parsetree.constant ->
Astlib.Ast_500.Parsetree.pattern
ppat_constant
constructs an Ast.pattern_desc.Ppat_constant
Example OCaml
Patterns such as 1
, 'a'
, "true"
, 1.0
, 1l
, 1L
, 1n
val ppat_alias :
loc:Location.t ->
Astlib.Ast_500.Parsetree.pattern ->
string Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.pattern
val ppat_var :
loc:Location.t ->
string Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.pattern
Object field
val oinherit :
loc:Location.t ->
Astlib.Ast_500.Parsetree.core_type ->
Astlib.Ast_500.Parsetree.object_field
oinherit
constructs an Ast.object_field_desc.Oinherit
val otag :
loc:Location.t ->
string Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.core_type ->
Astlib.Ast_500.Parsetree.object_field
otag
constructs an Ast.object_field_desc.Otag
Module type declaration
val module_type_declaration :
loc:Location.t ->
name:string Astlib.Location.loc ->
type_:Astlib.Ast_500.Parsetree.module_type option ->
Astlib.Ast_500.Parsetree.module_type_declaration
module_type_declaration
constructs an Ast.module_type_declaration
Example OCaml
Values of type module_type_declaration
represents:
S = MT
,S
for abstract module type declaration, whenpmtd_type
isNone
.
Module type
val pmty_alias :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.module_type
val pmty_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
Astlib.Ast_500.Parsetree.module_type
val pmty_typeof :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_expr ->
Astlib.Ast_500.Parsetree.module_type
val pmty_with :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_type ->
Astlib.Ast_500.Parsetree.with_constraint list ->
Astlib.Ast_500.Parsetree.module_type
val pmty_functor :
loc:Location.t ->
Astlib.Ast_500.Parsetree.functor_parameter ->
Astlib.Ast_500.Parsetree.module_type ->
Astlib.Ast_500.Parsetree.module_type
val pmty_signature :
loc:Location.t ->
Astlib.Ast_500.Parsetree.signature_item list ->
Astlib.Ast_500.Parsetree.module_type
val pmty_ident :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.module_type
Module substitution
val module_substitution :
loc:Location.t ->
name:string Astlib.Location.loc ->
manifest:Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.module_substitution
module_substitution
constructs an Ast.module_substitution
Example OCaml
Values of type module_substitution
represents S := M
Module expr
val pmod_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
Astlib.Ast_500.Parsetree.module_expr
val pmod_unpack :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.module_expr
val pmod_constraint :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_expr ->
Astlib.Ast_500.Parsetree.module_type ->
Astlib.Ast_500.Parsetree.module_expr
val pmod_apply :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_expr ->
Astlib.Ast_500.Parsetree.module_expr ->
Astlib.Ast_500.Parsetree.module_expr
val pmod_functor :
loc:Location.t ->
Astlib.Ast_500.Parsetree.functor_parameter ->
Astlib.Ast_500.Parsetree.module_expr ->
Astlib.Ast_500.Parsetree.module_expr
val pmod_structure :
loc:Location.t ->
Astlib.Ast_500.Parsetree.structure_item list ->
Astlib.Ast_500.Parsetree.module_expr
val pmod_ident :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.module_expr
Module declaration
val module_declaration :
loc:Location.t ->
name:string option Astlib.Location.loc ->
type_:Astlib.Ast_500.Parsetree.module_type ->
Astlib.Ast_500.Parsetree.module_declaration
module_declaration
constructs an Ast.module_declaration
Example OCaml
Values of type module_declaration
represents S : MT
Module binding
val module_binding :
loc:Location.t ->
name:string option Astlib.Location.loc ->
expr:Astlib.Ast_500.Parsetree.module_expr ->
Astlib.Ast_500.Parsetree.module_binding
module_binding
constructs an Ast.module_binding
Example OCaml
Values of type module_binding
represents module X = ME
Location
val location :
start:Lexing.position ->
end_:Lexing.position ->
ghost:bool ->
Astlib.Location.t
location
constructs an Ast.location
Letop
val letop :
let_:Astlib.Ast_500.Parsetree.binding_op ->
ands:Astlib.Ast_500.Parsetree.binding_op list ->
body:Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.letop
letop
constructs an Ast.letop
Label declaration
val label_declaration :
loc:Location.t ->
name:string Astlib.Location.loc ->
mutable_:Astlib.Ast_500.Asttypes.mutable_flag ->
type_:Astlib.Ast_500.Parsetree.core_type ->
Astlib.Ast_500.Parsetree.label_declaration
label_declaration
constructs an Ast.label_declaration
Example OCaml
{ ...; l: T; ... }
whenpld_mutable
isImmutable
,{ ...; mutable l: T; ... }
whenpld_mutable
isMutable
.
Note: T
can be a Ptyp_poly
.
Extension constructor
val extension_constructor :
loc:Location.t ->
name:string Astlib.Location.loc ->
kind:Astlib.Ast_500.Parsetree.extension_constructor_kind ->
Astlib.Ast_500.Parsetree.extension_constructor
extension_constructor
constructs an Ast.extension_constructor
Expression
val pexp_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
Astlib.Ast_500.Parsetree.expression
val pexp_letop :
loc:Location.t ->
Astlib.Ast_500.Parsetree.letop ->
Astlib.Ast_500.Parsetree.expression
pexp_letop
constructs an Ast.expression_desc.Pexp_letop
Example OCaml
let* P = E0 in E1
let* P0 = E00 and* P1 = E01 in E1
val pexp_open :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_expr Astlib.Ast_500.Parsetree.open_infos ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
pexp_open
constructs an Ast.expression_desc.Pexp_open
Example OCaml
M.(E)
let open M in E
let open! M in E
val pexp_pack :
loc:Location.t ->
Astlib.Ast_500.Parsetree.module_expr ->
Astlib.Ast_500.Parsetree.expression
pexp_pack
constructs an Ast.expression_desc.Pexp_pack
Example OCaml
(module ME)
.
(module ME : S)
is represented as Pexp_constraint(Pexp_pack ME, Ptyp_package S)
val pexp_newtype :
loc:Location.t ->
string Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
val pexp_object :
loc:Location.t ->
Astlib.Ast_500.Parsetree.class_structure ->
Astlib.Ast_500.Parsetree.expression
val pexp_poly :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.core_type option ->
Astlib.Ast_500.Parsetree.expression
pexp_poly
constructs an Ast.expression_desc.Pexp_poly
Example OCaml
Used for method bodies.
Can only be used as the expression under Cfk_concrete
for methods (not values).
val pexp_lazy :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
val pexp_assert :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
pexp_assert
constructs an Ast.expression_desc.Pexp_assert
Example OCaml
assert E
.
Note: assert false
is treated in a special way by the type-checker.
val pexp_letexception :
loc:Location.t ->
Astlib.Ast_500.Parsetree.extension_constructor ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
pexp_letexception
constructs an Ast.expression_desc.Pexp_letexception
Example OCaml
let exception C in E
val pexp_letmodule :
loc:Location.t ->
string option Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.module_expr ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
val pexp_override :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_500.Parsetree.expression) list ->
Astlib.Ast_500.Parsetree.expression
pexp_override
constructs an Ast.expression_desc.Pexp_override
Example OCaml
{< x1 = E1; ...; xn = En >}
val pexp_setinstvar :
loc:Location.t ->
string Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
val pexp_new :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.expression
val pexp_send :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
string Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.expression
val pexp_coerce :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.core_type option ->
Astlib.Ast_500.Parsetree.core_type ->
Astlib.Ast_500.Parsetree.expression
pexp_coerce
constructs an Ast.expression_desc.Pexp_coerce
Example OCaml
Pexp_coerce(E, from, T)
represents
(E :> T)
whenfrom
isNone
,(E : T0 :> T)
whenfrom
isSome T0
.
val pexp_constraint :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.core_type ->
Astlib.Ast_500.Parsetree.expression
val pexp_for :
loc:Location.t ->
Astlib.Ast_500.Parsetree.pattern ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Asttypes.direction_flag ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
pexp_for
constructs an Ast.expression_desc.Pexp_for
Example OCaml
Pexp_for(i, E1, E2, direction, E3)
represents:
val pexp_while :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
val pexp_sequence :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
val pexp_ifthenelse :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression option ->
Astlib.Ast_500.Parsetree.expression
val pexp_array :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression list ->
Astlib.Ast_500.Parsetree.expression
val pexp_setfield :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
val pexp_field :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.expression
val pexp_record :
loc:Location.t ->
(Astlib.Longident.t Astlib.Location.loc * Astlib.Ast_500.Parsetree.expression)
list ->
Astlib.Ast_500.Parsetree.expression option ->
Astlib.Ast_500.Parsetree.expression
pexp_record
constructs an Ast.expression_desc.Pexp_record
Example OCaml
Pexp_record([(l1,P1) ; ... ; (ln,Pn)], exp0)
represents
{ l1=P1; ...; ln=Pn }
whenexp0
isNone
{ E0 with l1=P1; ...; ln=Pn }
whenexp0
isSome E0
Invariant: n > 0
val pexp_variant :
loc:Location.t ->
string ->
Astlib.Ast_500.Parsetree.expression option ->
Astlib.Ast_500.Parsetree.expression
pexp_variant
constructs an Ast.expression_desc.Pexp_variant
Example OCaml
Pexp_variant(`A, exp)
represents
`A
whenexp
isNone
`A E
whenexp
isSome E
val pexp_construct :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.expression option ->
Astlib.Ast_500.Parsetree.expression
pexp_construct
constructs an Ast.expression_desc.Pexp_construct
Example OCaml
Pexp_construct(C, exp)
represents:
C
whenexp
isNone
,C E
whenexp
isSome E
,C (E1, ..., En)
whenexp
isSome (Pexp_tuple[E1;...;En])
val pexp_tuple :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression list ->
Astlib.Ast_500.Parsetree.expression
pexp_tuple
constructs an Ast.expression_desc.Pexp_tuple
Example OCaml
Expressions (E1, ..., En)
Invariant: n >= 2
val pexp_try :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.case list ->
Astlib.Ast_500.Parsetree.expression
pexp_try
constructs an Ast.expression_desc.Pexp_try
Example OCaml
try E0 with P1 -> E1 | ... | Pn -> En
val pexp_match :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.case list ->
Astlib.Ast_500.Parsetree.expression
pexp_match
constructs an Ast.expression_desc.Pexp_match
Example OCaml
match E0 with P1 -> E1 | ... | Pn -> En
val pexp_apply :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
(Astlib.Ast_500.Asttypes.arg_label * Astlib.Ast_500.Parsetree.expression)
list ->
Astlib.Ast_500.Parsetree.expression
pexp_apply
constructs an Ast.expression_desc.Pexp_apply
Example OCaml
Pexp_apply(E0, [(l1, E1) ; ... ; (ln, En)])
represents E0 ~l1:E1 ... ~ln:En
li
can be Nolabel
(non labeled argument), Labelled
(labelled arguments) or Optional
(optional argument).
Invariant: n > 0
val pexp_fun :
loc:Location.t ->
Astlib.Ast_500.Asttypes.arg_label ->
Astlib.Ast_500.Parsetree.expression option ->
Astlib.Ast_500.Parsetree.pattern ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
pexp_fun
constructs an Ast.expression_desc.Pexp_fun
Example OCaml
Pexp_fun(lbl, exp0, P, E1)
represents:
fun P -> E1
whenlbl
isNolabel
andexp0
isNone
fun ~l:P -> E1
whenlbl
isLabelled l
andexp0
isNone
fun ?l:P -> E1
whenlbl
isOptional l
andexp0
isNone
fun ?l:(P = E0) -> E1
whenlbl
isOptional l
andexp0
isSome E0
Notes:
val pexp_function :
loc:Location.t ->
Astlib.Ast_500.Parsetree.case list ->
Astlib.Ast_500.Parsetree.expression
pexp_function
constructs an Ast.expression_desc.Pexp_function
Example OCaml
function P1 -> E1 | ... | Pn -> En
val pexp_let :
loc:Location.t ->
Astlib.Ast_500.Asttypes.rec_flag ->
Astlib.Ast_500.Parsetree.value_binding list ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
pexp_let
constructs an Ast.expression_desc.Pexp_let
Example OCaml
Pexp_let(flag, [(P1,E1) ; ... ; (Pn,En)], E)
represents:
let P1 = E1 and ... and Pn = EN in E
whenflag
isNonrecursive
,let rec P1 = E1 and ... and Pn = EN in E
whenflag
isRecursive
.
val pexp_constant :
loc:Location.t ->
Astlib.Ast_500.Parsetree.constant ->
Astlib.Ast_500.Parsetree.expression
pexp_constant
constructs an Ast.expression_desc.Pexp_constant
Example OCaml
Expressions constant such as 1
, 'a'
, "true"
, 1.0
, 1l
, 1L
, 1n
val pexp_ident :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.expression
Directive argument
pdir_bool
constructs an Ast.directive_argument_desc.Pdir_bool
val pdir_ident :
loc:Location.t ->
Astlib.Longident.t ->
Astlib.Ast_500.Parsetree.directive_argument
pdir_ident
constructs an Ast.directive_argument_desc.Pdir_ident
val pdir_int :
loc:Location.t ->
string ->
char option ->
Astlib.Ast_500.Parsetree.directive_argument
pdir_int
constructs an Ast.directive_argument_desc.Pdir_int
pdir_string
constructs an Ast.directive_argument_desc.Pdir_string
Core type
val ptyp_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
Astlib.Ast_500.Parsetree.core_type
val ptyp_package :
loc:Location.t ->
(Astlib.Longident.t Astlib.Location.loc
* (Astlib.Longident.t Astlib.Location.loc
* Astlib.Ast_500.Parsetree.core_type)
list) ->
Astlib.Ast_500.Parsetree.core_type
val ptyp_poly :
loc:Location.t ->
string Astlib.Location.loc list ->
Astlib.Ast_500.Parsetree.core_type ->
Astlib.Ast_500.Parsetree.core_type
ptyp_poly
constructs an Ast.core_type_desc.Ptyp_poly
Example OCaml
'a1 ... 'an. T
Can only appear in the following context:
- As the
core_type
of aPpat_constraint
node corresponding to a constraint on a let-binding:
let x : 'a1 ... 'an. T = e ...
- Under
Cfk_virtual
for methods (not values).
- As the
core_type
of aPctf_method
node.
- As the
pld_type
field of alabel_declaration
.
- As a
core_type
of aPtyp_object
node.
- As the
pval_type
field of avalue_description
.
val ptyp_variant :
loc:Location.t ->
Astlib.Ast_500.Parsetree.row_field list ->
Astlib.Ast_500.Asttypes.closed_flag ->
string list option ->
Astlib.Ast_500.Parsetree.core_type
ptyp_variant
constructs an Ast.core_type_desc.Ptyp_variant
Example OCaml
Ptyp_variant([`A;`B], flag, labels)
represents:
val ptyp_alias :
loc:Location.t ->
Astlib.Ast_500.Parsetree.core_type ->
string ->
Astlib.Ast_500.Parsetree.core_type
val ptyp_class :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.core_type list ->
Astlib.Ast_500.Parsetree.core_type
ptyp_class
constructs an Ast.core_type_desc.Ptyp_class
Example OCaml
Ptyp_class(tconstr, l)
represents:
#tconstr
whenl=[]
,T #tconstr
whenl=[T]
,(T1, ..., Tn) #tconstr
whenl=[T1 ; ... ; Tn]
.
val ptyp_object :
loc:Location.t ->
Astlib.Ast_500.Parsetree.object_field list ->
Astlib.Ast_500.Asttypes.closed_flag ->
Astlib.Ast_500.Parsetree.core_type
ptyp_object
constructs an Ast.core_type_desc.Ptyp_object
Example OCaml
Ptyp_object([ l1:T1; ...; ln:Tn ], flag)
represents:
val ptyp_constr :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.core_type list ->
Astlib.Ast_500.Parsetree.core_type
ptyp_constr
constructs an Ast.core_type_desc.Ptyp_constr
Example OCaml
Ptyp_constr(lident, l)
represents:
tconstr
whenl=[]
,T tconstr
whenl=[T]
,(T1, ..., Tn) tconstr
whenl=[T1 ; ... ; Tn]
.
val ptyp_tuple :
loc:Location.t ->
Astlib.Ast_500.Parsetree.core_type list ->
Astlib.Ast_500.Parsetree.core_type
ptyp_tuple
constructs an Ast.core_type_desc.Ptyp_tuple
Example OCaml
Ptyp_tuple([T1 ; ... ; Tn])
represents a product type T1 * ... * Tn
.
Invariant: n >= 2
.
val ptyp_arrow :
loc:Location.t ->
Astlib.Ast_500.Asttypes.arg_label ->
Astlib.Ast_500.Parsetree.core_type ->
Astlib.Ast_500.Parsetree.core_type ->
Astlib.Ast_500.Parsetree.core_type
ptyp_arrow
constructs an Ast.core_type_desc.Ptyp_arrow
Example OCaml
Ptyp_arrow(lbl, T1, T2)
represents:
Constructor declaration
Class type field
val pctf_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
Astlib.Ast_500.Parsetree.class_type_field
val pctf_attribute :
loc:Location.t ->
Astlib.Ast_500.Parsetree.attribute ->
Astlib.Ast_500.Parsetree.class_type_field
val pctf_constraint :
loc:Location.t ->
(Astlib.Ast_500.Parsetree.core_type * Astlib.Ast_500.Parsetree.core_type) ->
Astlib.Ast_500.Parsetree.class_type_field
pctf_constraint
constructs an Ast.class_type_field_desc.Pctf_constraint
Example OCaml
constraint T1 = T2
val pctf_method :
loc:Location.t ->
(string Astlib.Location.loc
* Astlib.Ast_500.Asttypes.private_flag
* Astlib.Ast_500.Asttypes.virtual_flag
* Astlib.Ast_500.Parsetree.core_type) ->
Astlib.Ast_500.Parsetree.class_type_field
pctf_method
constructs an Ast.class_type_field_desc.Pctf_method
Example OCaml
method x: T
Note: T
can be a Ptyp_poly
.
val pctf_inherit :
loc:Location.t ->
Astlib.Ast_500.Parsetree.class_type ->
Astlib.Ast_500.Parsetree.class_type_field
Class type
val pcty_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
Astlib.Ast_500.Parsetree.class_type
val pcty_arrow :
loc:Location.t ->
Astlib.Ast_500.Asttypes.arg_label ->
Astlib.Ast_500.Parsetree.core_type ->
Astlib.Ast_500.Parsetree.class_type ->
Astlib.Ast_500.Parsetree.class_type
pcty_arrow
constructs an Ast.class_type_desc.Pcty_arrow
Example OCaml
Pcty_arrow(lbl, T, CT)
represents:
T -> CT
whenlbl
isNolabel
,~l:T -> CT
whenlbl
isLabelled l
,?l:T -> CT
whenlbl
isOptional l
.
val pcty_signature :
loc:Location.t ->
Astlib.Ast_500.Parsetree.class_signature ->
Astlib.Ast_500.Parsetree.class_type
val pcty_constr :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.core_type list ->
Astlib.Ast_500.Parsetree.class_type
Class structure
val class_structure :
self:Astlib.Ast_500.Parsetree.pattern ->
fields:Astlib.Ast_500.Parsetree.class_field list ->
Astlib.Ast_500.Parsetree.class_structure
class_structure
constructs an Ast.class_structure
Example OCaml
Values of type class_structure
represents:
object(selfpat) ... end
object ... end
whenpcstr_self
isPpat_any
Class signature
val class_signature :
self:Astlib.Ast_500.Parsetree.core_type ->
fields:Astlib.Ast_500.Parsetree.class_type_field list ->
Astlib.Ast_500.Parsetree.class_signature
class_signature
constructs an Ast.class_signature
Example OCaml
Values of type class_signature
represents:
object('selfpat) ... end
object ... end
whenpcsig_self
isPtyp_any
Class field
val pcf_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
Astlib.Ast_500.Parsetree.class_field
val pcf_attribute :
loc:Location.t ->
Astlib.Ast_500.Parsetree.attribute ->
Astlib.Ast_500.Parsetree.class_field
val pcf_initializer :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.class_field
val pcf_constraint :
loc:Location.t ->
(Astlib.Ast_500.Parsetree.core_type * Astlib.Ast_500.Parsetree.core_type) ->
Astlib.Ast_500.Parsetree.class_field
val pcf_method :
loc:Location.t ->
(string Astlib.Location.loc
* Astlib.Ast_500.Asttypes.private_flag
* Astlib.Ast_500.Parsetree.class_field_kind) ->
Astlib.Ast_500.Parsetree.class_field
pcf_method
constructs an Ast.class_field_desc.Pcf_method
Example OCaml
val pcf_val :
loc:Location.t ->
(string Astlib.Location.loc
* Astlib.Ast_500.Asttypes.mutable_flag
* Astlib.Ast_500.Parsetree.class_field_kind) ->
Astlib.Ast_500.Parsetree.class_field
pcf_val
constructs an Ast.class_field_desc.Pcf_val
Example OCaml
Pcf_val(x,flag, kind)
represents:
val x = E
whenflag
isImmutable
andkind
isCfk_concrete(Fresh, E)
val virtual x: T
whenflag
isImmutable
andkind
isCfk_virtual(T)
val mutable x = E
whenflag
isMutable
andkind
isCfk_concrete(Fresh, E)
val mutable virtual x: T
whenflag
isMutable
andkind
isCfk_virtual(T)
val pcf_inherit :
loc:Location.t ->
Astlib.Ast_500.Asttypes.override_flag ->
Astlib.Ast_500.Parsetree.class_expr ->
string Astlib.Location.loc option ->
Astlib.Ast_500.Parsetree.class_field
pcf_inherit
constructs an Ast.class_field_desc.Pcf_inherit
Example OCaml
Pcf_inherit(flag, CE, s)
represents:
Class expr
val pcl_extension :
loc:Location.t ->
(string Astlib.Location.loc * Astlib.Ast_500.Parsetree.payload) ->
Astlib.Ast_500.Parsetree.class_expr
val pcl_constraint :
loc:Location.t ->
Astlib.Ast_500.Parsetree.class_expr ->
Astlib.Ast_500.Parsetree.class_type ->
Astlib.Ast_500.Parsetree.class_expr
val pcl_let :
loc:Location.t ->
Astlib.Ast_500.Asttypes.rec_flag ->
Astlib.Ast_500.Parsetree.value_binding list ->
Astlib.Ast_500.Parsetree.class_expr ->
Astlib.Ast_500.Parsetree.class_expr
pcl_let
constructs an Ast.class_expr_desc.Pcl_let
Example OCaml
Pcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE)
represents:
let P1 = E1 and ... and Pn = EN in CE
whenrec
isNonrecursive
,let rec P1 = E1 and ... and Pn = EN in CE
whenrec
isRecursive
.
val pcl_apply :
loc:Location.t ->
Astlib.Ast_500.Parsetree.class_expr ->
(Astlib.Ast_500.Asttypes.arg_label * Astlib.Ast_500.Parsetree.expression)
list ->
Astlib.Ast_500.Parsetree.class_expr
pcl_apply
constructs an Ast.class_expr_desc.Pcl_apply
Example OCaml
Pcl_apply(CE, [(l1,E1) ; ... ; (ln,En)])
represents CE ~l1:E1 ... ~ln:En
. li
can be empty (non labeled argument) or start with ?
(optional argument).
Invariant: n > 0
val pcl_fun :
loc:Location.t ->
Astlib.Ast_500.Asttypes.arg_label ->
Astlib.Ast_500.Parsetree.expression option ->
Astlib.Ast_500.Parsetree.pattern ->
Astlib.Ast_500.Parsetree.class_expr ->
Astlib.Ast_500.Parsetree.class_expr
pcl_fun
constructs an Ast.class_expr_desc.Pcl_fun
Example OCaml
Pcl_fun(lbl, exp0, P, CE)
represents:
fun P -> CE
whenlbl
isNolabel
andexp0
isNone
,fun ~l:P -> CE
whenlbl
isLabelled l
andexp0
isNone
,fun ?l:P -> CE
whenlbl
isOptional l
andexp0
isNone
,fun ?l:(P = E0) -> CE
whenlbl
isOptional l
andexp0
isSome E0
.
val pcl_structure :
loc:Location.t ->
Astlib.Ast_500.Parsetree.class_structure ->
Astlib.Ast_500.Parsetree.class_expr
val pcl_constr :
loc:Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.core_type list ->
Astlib.Ast_500.Parsetree.class_expr
Case
val case :
lhs:Astlib.Ast_500.Parsetree.pattern ->
guard:Astlib.Ast_500.Parsetree.expression option ->
rhs:Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.case
Binding op
val binding_op :
loc:Location.t ->
op:string Astlib.Location.loc ->
pat:Astlib.Ast_500.Parsetree.pattern ->
exp:Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.binding_op
binding_op
constructs an Ast.binding_op
Attribute
val attribute :
loc:Location.t ->
name:string Astlib.Location.loc ->
payload:Astlib.Ast_500.Parsetree.payload ->
Astlib.Ast_500.Parsetree.attribute
attribute
constructs an Ast.attribute
Example OCaml
Attributes such as [@id ARG]
and [@@id ARG]
.
Metadata containers passed around within the AST. The compiler ignores unknown attributes.
'a open infos
val open_infos :
loc:Location.t ->
expr:'a ->
override:Astlib.Ast_500.Asttypes.override_flag ->
'a Astlib.Ast_500.Parsetree.open_infos
open_infos
constructs an Ast.'aopen_infos
Example OCaml
Values of type 'a open_infos
represents:
open! X
whenpopen_override
isOverride
(silences the "used identifier shadowing" warning)open X
whenpopen_override
isFresh
'a include infos
include_infos
constructs an Ast.'ainclude_infos
'a class infos
val class_infos :
loc:Location.t ->
virt:Astlib.Ast_500.Asttypes.virtual_flag ->
params:
(Astlib.Ast_500.Parsetree.core_type
* (Astlib.Ast_500.Asttypes.variance * Astlib.Ast_500.Asttypes.injectivity))
list ->
name:string Astlib.Location.loc ->
expr:'a ->
'a Astlib.Ast_500.Parsetree.class_infos
class_infos
constructs an Ast.'aclass_infos
Example OCaml
Values of type class_expr class_infos
represents:
class c = ...
class ['a1,...,'an] c = ...
class virtual c = ...
They are also used for "class type" declaration.
This module contains updated versions of node constructors that were kept stable when the node changed. For every function in this module, there's an equally-named function outside this module. The function outside this module will stay stable, whereas the function inside this module will adapt potential upcoming new compiler features. Only use a function in this module, if the equally-named one outside this module is missing a feature you need.
val ppat_construct :
loc:Astlib.Location.t ->
Astlib.Longident.t Astlib.Location.loc ->
Astlib.Ast_500.Parsetree.pattern option ->
Astlib.Ast_500.Parsetree.pattern
val constructor_declaration :
loc:Astlib.Location.t ->
name:string Astlib.Location.loc ->
args:Astlib.Ast_500.Parsetree.constructor_arguments ->
res:Astlib.Ast_500.Parsetree.core_type option ->
Astlib.Ast_500.Parsetree.constructor_declaration
evar id
produces a Pexp_ident _
expression, it parses its input so you can pass any dot-separated identifier, for instance: evar ~loc "Foo.bar"
.
val eapply :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression list ->
Astlib.Ast_500.Parsetree.expression
Same as pexp_apply but without labels
val eabstract :
loc:Location.t ->
Astlib.Ast_500.Parsetree.pattern list ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
val esequence :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression list ->
Astlib.Ast_500.Parsetree.expression
val ppat_tuple_opt :
loc:Location.t ->
Astlib.Ast_500.Parsetree.pattern list ->
Astlib.Ast_500.Parsetree.pattern option
val pexp_tuple_opt :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression list ->
Astlib.Ast_500.Parsetree.expression option
val pconstruct :
Astlib.Ast_500.Parsetree.constructor_declaration ->
Astlib.Ast_500.Parsetree.pattern option ->
Astlib.Ast_500.Parsetree.pattern
val econstruct :
Astlib.Ast_500.Parsetree.constructor_declaration ->
Astlib.Ast_500.Parsetree.expression option ->
Astlib.Ast_500.Parsetree.expression
val elist_tail :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression list ->
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
elist_tail ~loc [expr1; expr2; expr3] expr_tail
produces the expression expr1::expr2::expr3::expr_tail
.
val elist :
loc:Location.t ->
Astlib.Ast_500.Parsetree.expression list ->
Astlib.Ast_500.Parsetree.expression
elist ~loc [expr1; expr2; expr3]
produces the list litteral expression [expr1; expr2; expr3]
.
val plist_tail :
loc:Location.t ->
Astlib.Ast_500.Parsetree.pattern list ->
Astlib.Ast_500.Parsetree.pattern ->
Astlib.Ast_500.Parsetree.pattern
plist_tail ~loc [pat1; pat2; pat3] pat_tail
produces the pattern pat1::pat2::pat3::pat_tail
.
val plist :
loc:Location.t ->
Astlib.Ast_500.Parsetree.pattern list ->
Astlib.Ast_500.Parsetree.pattern
plist ~loc [pat1; pat2; pat3]
produces the list pattern [pat1; pat2; pat3]
.
val pstr_value_list :
loc:Location.t ->
Ppxlib_ast.Asttypes.rec_flag ->
Astlib.Ast_500.Parsetree.value_binding list ->
Astlib.Ast_500.Parsetree.structure_item list
pstr_value_list ~loc rf vbs
= pstr_value ~loc rf vbs
if vbs <> []
, []
otherwise.
val nonrec_type_declaration :
loc:Location.t ->
name:string Loc.t ->
params:
(Astlib.Ast_500.Parsetree.core_type * Ppxlib_ast.Asttypes.variance) list ->
cstrs:
(Astlib.Ast_500.Parsetree.core_type
* Astlib.Ast_500.Parsetree.core_type
* Location.t)
list ->
kind:Astlib.Ast_500.Parsetree.type_kind ->
private_:Ppxlib_ast.Asttypes.private_flag ->
manifest:Astlib.Ast_500.Parsetree.core_type option ->
Astlib.Ast_500.Parsetree.type_declaration
val unapplied_type_constr_conv :
loc:Location.t ->
Longident.t Loc.t ->
f:(string -> string) ->
Astlib.Ast_500.Parsetree.expression
unapplied_type_constr_conv
is the standard way to map identifiers to conversion fonctions, for preprocessor that creates values that follow the structure of types. More precisely, path_conv path (sprintf "sexp_of_%s")
is:
- sexp_of_t if path is "t"
- A.B.sexp_of_foo if path is "A.B.foo"
- A.B.sexp_of_f__foo (module A1) (module A2) if path is "A.B.F(A1)(A2).foo"
type_constr_conv
also applies it to a list of expression, which both prevents the compiler from allocating useless closures, and almost always what is needed, since type constructors are always applied.
val type_constr_conv :
loc:Location.t ->
Longident.t Loc.t ->
f:(string -> string) ->
Astlib.Ast_500.Parsetree.expression list ->
Astlib.Ast_500.Parsetree.expression
val eta_reduce :
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression option
Tries to simplify fun v1 v2 .. -> f v1 v2 ..
into f
. Only works when f
is a path, not an arbitrary expression as that would change the meaning of the code. This can be used either for cleaning up the generated code, or to reduce allocation if f
is a local variable (the compiler won't optimize the allocation of the closure).
Eta-reduction can change the types/behavior in some corner cases that are unlikely to show up in generated code:
- if
f
has optional arguments, eta-expandingf
can drop them - because labels commute, it can change the type of an expression: $ let f ~x y = x + y let f2 = fun x -> add x;; val f : x:int -> int -> int = <fun> val f2 : int -> x:int -> int = <fun> In fact, if
f
does side effects before receiving all its arguments, and if the eta-expansion is partially applied, eta-reducing could change behavior.
eta_reduce_if_possible_and_nonrec
is meant for the case where the resulting expression is going to be bound in a potentially recursive let-binding, where we have to keep the eta-expansion when rec_flag
is Recursive
to avoid a compile error.
val eta_reduce_if_possible :
Astlib.Ast_500.Parsetree.expression ->
Astlib.Ast_500.Parsetree.expression
val eta_reduce_if_possible_and_nonrec :
Astlib.Ast_500.Parsetree.expression ->
rec_flag:Astlib.Ast_500.Asttypes.rec_flag ->
Astlib.Ast_500.Parsetree.expression
- Value description
- Value binding
- Type extension
- Type exception
- Type declaration
- Toplevel directive
- Structure item
- Signature item
- Row field
- Position
- Pattern
- Object field
- Module type declaration
- Module type
- Module substitution
- Module expr
- Module declaration
- Module binding
- Location
- Letop
- Label declaration
- Extension constructor
- Expression
- Directive argument
- Core type
- Constructor declaration
- Class type field
- Class type
- Class structure
- Class signature
- Class field
- Class expr
- Case
- Binding op
- Attribute
- 'a open infos
- 'a include infos
- 'a class infos