package ppxlib
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=507cc73ccf895f22eeb5257a2243838c18a38a09105fcff55eeef9148555422b
sha512=73fef8ab8761bfbfde6ae87cc51eaacc5a5c937f0d628a890f0abdb2bffbf073932c25287a9e3baa2a1947c37f3dfa7f83ddd33c440e2e800971015addc97cd2
doc/ppxlib.ast/Ppxlib_ast/Ast/index.html
Module Ppxlib_ast.Ast
Definition of the OCaml AST
and location_stack = location listand longident = Astlib.Longident.t = Auxiliary AST types used by parsetree and typedtree.
and arg_label = Astlib.Ast_500.Asttypes.arg_label = Abstract syntax tree produced by parsing
and constant = Astlib.Ast_500.Parsetree.constant = | Pconst_integer of string * char option(*Integer constants such as
33l3L3n.Suffixes
*)[g-z][G-Z]are accepted by the parser. Suffixes except'l','L'and'n'are rejected by the typechecker| Pconst_char of char(*Character such as
*)'c'.| Pconst_string of string * location * string option(*Constant string such as
"constant"or{delim|other constant|delim}.The location span the content of the string, without the delimiters.
*)| Pconst_float of string * char option(*Float constant such as
3.4,2e5or1.4e-4.Suffixes
*)g-zG-Zare accepted by the parser. Suffixes are rejected by the typechecker.
Extension points
Attributes such as [@id ARG] and [@@id ARG].
Metadata containers passed around within the AST. The compiler ignores unknown attributes.
Extension points such as [%id ARG] and [%%id ARG].
Sub-language placeholder -- rejected by the typechecker.
and attributes = attribute listand payload = Astlib.Ast_500.Parsetree.payload = | PStr of structure| PSig of signature(*
*): SIGin an attribute or an extension point| PTyp of core_type(*
*): Tin an attribute or an extension point| PPat of pattern * expression option(*
*)? Por? P when E, in an attribute or an extension point
Core language
Type expressions
and core_type = Astlib.Ast_500.Parsetree.core_type = {ptyp_desc : core_type_desc;ptyp_loc : location;ptyp_loc_stack : location_stack;ptyp_attributes : attributes;(*
*)... [@id1] [@id2]
}and core_type_desc = Astlib.Ast_500.Parsetree.core_type_desc = | Ptyp_any(*
*)_| Ptyp_var of string(*A type variable such as
*)'a| Ptyp_arrow of arg_label * core_type * core_type| Ptyp_tuple of core_type list(*Ptyp_tuple([T1 ; ... ; Tn])represents a product typeT1 * ... * Tn.Invariant:
*)n >= 2.| Ptyp_constr of longident_loc * core_type list(*Ptyp_constr(lident, l)represents:tconstrwhenl=[],T tconstrwhenl=[T],(T1, ..., Tn) tconstrwhenl=[T1 ; ... ; Tn].
| Ptyp_object of object_field list * closed_flag| Ptyp_class of longident_loc * core_type list(*Ptyp_class(tconstr, l)represents:#tconstrwhenl=[],T #tconstrwhenl=[T],(T1, ..., Tn) #tconstrwhenl=[T1 ; ... ; Tn].
| Ptyp_alias of core_type * string(*
*)T as 'a.| Ptyp_variant of row_field list * closed_flag * label list option| Ptyp_poly of string loc list * core_type(*'a1 ... 'an. TCan only appear in the following context:
- As the
core_typeof aPpat_constraintnode corresponding to a constraint on a let-binding:
let x : 'a1 ... 'an. T = e ...- Under
Cfk_virtualfor methods (not values).
- As the
core_typeof aPctf_methodnode.
- As the
pld_typefield of alabel_declaration.
- As a
core_typeof aPtyp_objectnode.
- As the
pval_typefield of avalue_description.
- As the
| Ptyp_package of package_type(*
*)(module S).| Ptyp_extension of extension(*
*)[%id].
and package_type = longident_loc * (longident_loc * core_type) listAs package_type typed values:
(S, [])represents(module S),(S, [(t1, T1) ; ... ; (tn, Tn)])represents(module S with type t1 = T1 and ... and tn = Tn).
and row_field = Astlib.Ast_500.Parsetree.row_field = {prf_desc : row_field_desc;prf_loc : location;prf_attributes : attributes;
}and row_field_desc = Astlib.Ast_500.Parsetree.row_field_desc = | Rtag of label loc * bool * core_type list(*Rtag(`A, b, l)represents:`Awhenbistrueandlis[],`A of Twhenbisfalseandlis[T],`A of T1 & .. & Tnwhenbisfalseandlis[T1;...Tn],`A of & T1 & .. & Tnwhenbistrueandlis[T1;...Tn].
- The
boolfield 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)
| Rinherit of core_type(*
*)[ | t ]
and object_field = Astlib.Ast_500.Parsetree.object_field = {pof_desc : object_field_desc;pof_loc : location;pof_attributes : attributes;
}and object_field_desc = Astlib.Ast_500.Parsetree.object_field_desc = Patterns
and pattern = Astlib.Ast_500.Parsetree.pattern = {ppat_desc : pattern_desc;ppat_loc : location;ppat_loc_stack : location_stack;ppat_attributes : attributes;(*
*)... [@id1] [@id2]
}and pattern_desc = Astlib.Ast_500.Parsetree.pattern_desc = | Ppat_any(*The pattern
*)_.| Ppat_var of string loc(*A variable pattern such as
*)x| Ppat_alias of pattern * string loc(*An alias pattern such as
*)P as 'a| Ppat_constant of constant(*Patterns such as
*)1,'a',"true",1.0,1l,1L,1n| Ppat_interval of constant * constant(*Patterns such as
'a'..'z'.Other forms of interval are recognized by the parser but rejected by the type-checker.
*)| Ppat_tuple of pattern list(*Patterns
(P1, ..., Pn).Invariant:
*)n >= 2| Ppat_construct of longident_loc * (string loc list * pattern) option(*Ppat_construct(C, args)represents:CwhenargsisNone,C PwhenargsisSome ([], P)C (P1, ..., Pn)whenargsisSome ([], Ppat_tuple [P1; ...; Pn])C (type a b) PwhenargsisSome ([a; b], P)
| Ppat_variant of label * pattern option(*Ppat_variant(`A, pat)represents:`AwhenpatisNone,`A PwhenpatisSome P
| Ppat_record of (longident_loc * pattern) list * closed_flag| Ppat_array of pattern list(*Pattern
*)[| P1; ...; Pn |]| Ppat_or of pattern * pattern(*Pattern
*)P1 | P2| Ppat_constraint of pattern * core_type(*Pattern
*)(P : T)| Ppat_type of longident_loc(*Pattern
*)#tconst| Ppat_lazy of pattern(*Pattern
*)lazy P| Ppat_unpack of string option loc(*Ppat_unpack(s)represents:(module P)whensisSome "P"(module _)whensisNone
Note:
*)(module P : S)is represented asPpat_constraint(Ppat_unpack(Some "P"), Ptyp_package S)| Ppat_exception of pattern(*Pattern
*)exception P| Ppat_extension of extension(*Pattern
*)[%id]| Ppat_open of longident_loc * pattern(*Pattern
*)M.(P)
Value expressions
and expression = Astlib.Ast_500.Parsetree.expression = {pexp_desc : expression_desc;pexp_loc : location;pexp_loc_stack : location_stack;pexp_attributes : attributes;(*
*)... [@id1] [@id2]
}and expression_desc = Astlib.Ast_500.Parsetree.expression_desc = | Pexp_ident of longident_loc(*Identifiers such as
*)xandM.x| Pexp_constant of constant(*Expressions constant such as
*)1,'a',"true",1.0,1l,1L,1n| Pexp_let of rec_flag * value_binding list * expression(*Pexp_let(flag, [(P1,E1) ; ... ; (Pn,En)], E)represents:let P1 = E1 and ... and Pn = EN in EwhenflagisNonrecursive,let rec P1 = E1 and ... and Pn = EN in EwhenflagisRecursive.
| Pexp_function of cases(*
*)function P1 -> E1 | ... | Pn -> En| Pexp_fun of arg_label * expression option * pattern * expression(*Pexp_fun(lbl, exp0, P, E1)represents:fun P -> E1whenlblisNolabelandexp0isNonefun ~l:P -> E1whenlblisLabelled landexp0isNonefun ?l:P -> E1whenlblisOptional landexp0isNonefun ?l:(P = E0) -> E1whenlblisOptional landexp0isSome E0
Notes:
- If
E0is provided, onlyOptionalis allowed. fun P1 P2 .. Pn -> E1is represented as nestedPexp_fun.let f P = Eis represented usingPexp_fun.
| Pexp_apply of expression * (arg_label * expression) list| Pexp_match of expression * cases(*
*)match E0 with P1 -> E1 | ... | Pn -> En| Pexp_try of expression * cases(*
*)try E0 with P1 -> E1 | ... | Pn -> En| Pexp_tuple of expression list(*Expressions
(E1, ..., En)Invariant:
*)n >= 2| Pexp_construct of longident_loc * expression option(*Pexp_construct(C, exp)represents:CwhenexpisNone,C EwhenexpisSome E,C (E1, ..., En)whenexpisSome (Pexp_tuple[E1;...;En])
| Pexp_variant of label * expression option(*Pexp_variant(`A, exp)represents`AwhenexpisNone`A EwhenexpisSome E
| Pexp_record of (longident_loc * expression) list * expression option(*Pexp_record([(l1,P1) ; ... ; (ln,Pn)], exp0)represents{ l1=P1; ...; ln=Pn }whenexp0isNone{ E0 with l1=P1; ...; ln=Pn }whenexp0isSome E0
Invariant:
*)n > 0| Pexp_field of expression * longident_loc(*
*)E.l| Pexp_setfield of expression * longident_loc * expression(*
*)E1.l <- E2| Pexp_array of expression list(*
*)[| E1; ...; En |]| Pexp_ifthenelse of expression * expression * expression option(*
*)if E1 then E2 else E3| Pexp_sequence of expression * expression(*
*)E1; E2| Pexp_while of expression * expression(*
*)while E1 do E2 done| Pexp_for of pattern * expression * expression * direction_flag * expression| Pexp_constraint of expression * core_type(*
*)(E : T)| Pexp_coerce of expression * core_type option * core_type(*Pexp_coerce(E, from, T)represents(E :> T)whenfromisNone,(E : T0 :> T)whenfromisSome T0.
| Pexp_send of expression * label loc(*
*)E # m| Pexp_new of longident_loc(*
*)new M.c| Pexp_setinstvar of label loc * expression(*
*)x <- 2| Pexp_override of (label loc * expression) list(*
*){< x1 = E1; ...; xn = En >}| Pexp_letmodule of string option loc * module_expr * expression(*
*)let module M = ME in E| Pexp_letexception of extension_constructor * expression(*
*)let exception C in E| Pexp_assert of expression(*assert E.Note:
*)assert falseis treated in a special way by the type-checker.| Pexp_lazy of expression(*
*)lazy E| Pexp_poly of expression * core_type option(*Used for method bodies.
Can only be used as the expression under
*)Cfk_concretefor methods (not values).| Pexp_object of class_structure(*
*)object ... end| Pexp_newtype of string loc * expression(*
*)fun (type t) -> E| Pexp_pack of module_expr(*(module ME).
*)(module ME : S)is represented asPexp_constraint(Pexp_pack ME, Ptyp_package S)| Pexp_open of open_declaration * expression(*M.(E)let open M in Elet open! M in E
| Pexp_letop of letop(*let* P = E0 in E1let* P0 = E00 and* P1 = E01 in E1
| Pexp_extension of extension(*
*)[%id]| Pexp_unreachable(*
*).
and case = Astlib.Ast_500.Parsetree.case = {pc_lhs : pattern;pc_guard : expression option;pc_rhs : expression;
}Values of type case represents (P -> E) or (P when E0 -> E)
and letop = Astlib.Ast_500.Parsetree.letop = {let_ : binding_op;ands : binding_op list;body : expression;
}and binding_op = Astlib.Ast_500.Parsetree.binding_op = {pbop_op : string loc;pbop_pat : pattern;pbop_exp : expression;pbop_loc : location;
}Value descriptions
and value_description = Astlib.Ast_500.Parsetree.value_description = {pval_name : string loc;pval_type : core_type;pval_prim : string list;pval_attributes : attributes;(*
*)... [@@id1] [@@id2]pval_loc : location;
}Values of type value_description represents:
Type declarations
and type_declaration = Astlib.Ast_500.Parsetree.type_declaration = {ptype_name : string loc;ptype_params : (core_type * (variance * injectivity)) list;(*
*)('a1,...'an) tptype_cstrs : (core_type * core_type * location) list;(*
*)... constraint T1=T1' ... constraint Tn=Tn'ptype_kind : type_kind;ptype_private : private_flag;(*for
*)= private ...ptype_manifest : core_type option;(*represents
*)= Tptype_attributes : attributes;(*
*)... [@@id1] [@@id2]ptype_loc : location;
}Here are type declarations and their representation, for various ptype_kind and ptype_manifest values:
type twhentype_kindisPtype_abstract, andmanifestisNone,type t = T0whentype_kindisPtype_abstract, andmanifestisSome T0,type t = C of T | ...whentype_kindisPtype_variant, andmanifestisNone,type t = T0 = C of T | ...whentype_kindisPtype_variant, andmanifestisSome T0,type t = {l: T; ...}whentype_kindisPtype_record, andmanifestisNone,type t = T0 = {l : T; ...}whentype_kindisPtype_record, andmanifestisSome T0,type t = ..whentype_kindisPtype_open, andmanifestisNone.
and type_kind = Astlib.Ast_500.Parsetree.type_kind = | Ptype_abstract| Ptype_variant of constructor_declaration list| Ptype_record of label_declaration list(*Invariant: non-empty list
*)| Ptype_open
and label_declaration = Astlib.Ast_500.Parsetree.label_declaration = {pld_name : string loc;pld_mutable : mutable_flag;pld_type : core_type;pld_loc : location;pld_attributes : attributes;(*
*)l : T [@id1] [@id2]
}{ ...; l: T; ... }whenpld_mutableisImmutable,{ ...; mutable l: T; ... }whenpld_mutableisMutable.
Note: T can be a Ptyp_poly.
and constructor_declaration = Astlib.Ast_500.Parsetree.constructor_declaration =
{pcd_name : string loc;pcd_vars : string loc list;pcd_args : constructor_arguments;pcd_res : core_type option;pcd_loc : location;pcd_attributes : attributes;(*
*)C of ... [@id1] [@id2]
}and constructor_arguments = Astlib.Ast_500.Parsetree.constructor_arguments = | Pcstr_tuple of core_type list| Pcstr_record of label_declaration list(*Values of type
constructor_declarationrepresents the constructor arguments of:C of T1 * ... * Tnwhenres = None, andargs = Pcstr_tuple [T1; ... ; Tn],C: T0whenres = Some T0, andargs = Pcstr_tuple [],C: T1 * ... * Tn -> T0whenres = Some T0, andargs = Pcstr_tuple [T1; ... ; Tn],C of {...}whenres = None, andargs = Pcstr_record [...],C: {...} -> T0whenres = Some T0, andargs = Pcstr_record [...].
and type_extension = Astlib.Ast_500.Parsetree.type_extension = {ptyext_path : longident_loc;ptyext_params : (core_type * (variance * injectivity)) list;ptyext_constructors : extension_constructor list;ptyext_private : private_flag;ptyext_loc : location;ptyext_attributes : attributes;(*...
*)@@id1@@id2
}Definition of new extensions constructors for the extensive sum type t (type t += ...).
and extension_constructor = Astlib.Ast_500.Parsetree.extension_constructor = {pext_name : string loc;pext_kind : extension_constructor_kind;pext_loc : location;pext_attributes : attributes;(*
*)C of ... [@id1] [@id2]
}and type_exception = Astlib.Ast_500.Parsetree.type_exception = {ptyexn_constructor : extension_constructor;ptyexn_loc : location;ptyexn_attributes : attributes;(*
*)... [@@id1] [@@id2]
}Definition of a new exception (exception E).
and extension_constructor_kind =
Astlib.Ast_500.Parsetree.extension_constructor_kind =
| Pext_decl of string loc list * constructor_arguments * core_type option(*Pext_decl(existentials, c_args, t_opt)describes a new extension constructor. It can be:C of T1 * ... * Tnwhen:existentialsis[],c_argsis[T1; ...; Tn],t_optisNone.
C: T0whenexistentialsis[],c_argsis[],t_optisSome T0.
C: T1 * ... * Tn -> T0whenexistentialsis[],c_argsis[T1; ...; Tn],t_optisSome T0.
C: 'a... . T1 * ... * Tn -> T0whenexistentialsis['a;...],c_argsis[T1; ... ; Tn],t_optisSome T0.
| Pext_rebind of longident_loc(*
*)Pext_rebind(D)re-export the constructorDwith the new nameC
Class language
Type expressions for the class language
and class_type = Astlib.Ast_500.Parsetree.class_type = {pcty_desc : class_type_desc;pcty_loc : location;pcty_attributes : attributes;(*
*)... [@id1] [@id2]
}and class_type_desc = Astlib.Ast_500.Parsetree.class_type_desc = | Pcty_constr of longident_loc * core_type list(*c['a1, ..., 'an] c
| Pcty_signature of class_signature(*
*)object ... end| Pcty_arrow of arg_label * core_type * class_type(*Pcty_arrow(lbl, T, CT)represents:T -> CTwhenlblisNolabel,~l:T -> CTwhenlblisLabelled l,?l:T -> CTwhenlblisOptional l.
| Pcty_extension of extension(*
*)%id| Pcty_open of open_description * class_type(*
*)let open M in CT
and class_signature = Astlib.Ast_500.Parsetree.class_signature = {pcsig_self : core_type;pcsig_fields : class_type_field list;
}Values of type class_signature represents:
object('selfpat) ... endobject ... endwhenpcsig_selfisPtyp_any
and class_type_field = Astlib.Ast_500.Parsetree.class_type_field = {pctf_desc : class_type_field_desc;pctf_loc : location;pctf_attributes : attributes;(*
*)... [@@id1] [@@id2]
}and class_type_field_desc = Astlib.Ast_500.Parsetree.class_type_field_desc = | Pctf_inherit of class_type(*
*)inherit CT| Pctf_val of label loc * mutable_flag * virtual_flag * core_type(*
*)val x: T| Pctf_method of label loc * private_flag * virtual_flag * core_type| Pctf_constraint of core_type * core_type(*
*)constraint T1 = T2| Pctf_attribute of attribute(*
*)[@@@id]| Pctf_extension of extension(*
*)[%%id]
and 'a class_infos = 'a Astlib.Ast_500.Parsetree.class_infos = {pci_virt : virtual_flag;pci_params : (core_type * (variance * injectivity)) list;pci_name : string loc;pci_expr : 'a;pci_loc : location;pci_attributes : attributes;(*
*)... [@@id1] [@@id2]
}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.
and class_description = class_type class_infosand class_type_declaration = class_type class_infosValue expressions for the class language
and class_expr = Astlib.Ast_500.Parsetree.class_expr = {pcl_desc : class_expr_desc;pcl_loc : location;pcl_attributes : attributes;(*
*)... [@id1] [@id2]
}and class_expr_desc = Astlib.Ast_500.Parsetree.class_expr_desc = | Pcl_constr of longident_loc * core_type list(*
*)cand['a1, ..., 'an] c| Pcl_structure of class_structure(*
*)object ... end| Pcl_fun of arg_label * expression option * pattern * class_expr(*Pcl_fun(lbl, exp0, P, CE)represents:fun P -> CEwhenlblisNolabelandexp0isNone,fun ~l:P -> CEwhenlblisLabelled landexp0isNone,fun ?l:P -> CEwhenlblisOptional landexp0isNone,fun ?l:(P = E0) -> CEwhenlblisOptional landexp0isSome E0.
| Pcl_apply of class_expr * (arg_label * expression) list(*Pcl_apply(CE, [(l1,E1) ; ... ; (ln,En)])representsCE ~l1:E1 ... ~ln:En.lican be empty (non labeled argument) or start with?(optional argument).Invariant:
*)n > 0| Pcl_let of rec_flag * value_binding list * class_expr(*Pcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE)represents:let P1 = E1 and ... and Pn = EN in CEwhenrecisNonrecursive,let rec P1 = E1 and ... and Pn = EN in CEwhenrecisRecursive.
| Pcl_constraint of class_expr * class_type(*
*)(CE : CT)| Pcl_extension of extension(*
*)[%id]| Pcl_open of open_description * class_expr(*
*)let open M in CE
and class_structure = Astlib.Ast_500.Parsetree.class_structure = {pcstr_self : pattern;pcstr_fields : class_field list;
}Values of type class_structure represents:
object(selfpat) ... endobject ... endwhenpcstr_selfisPpat_any
and class_field = Astlib.Ast_500.Parsetree.class_field = {pcf_desc : class_field_desc;pcf_loc : location;pcf_attributes : attributes;(*
*)... [@@id1] [@@id2]
}and class_field_desc = Astlib.Ast_500.Parsetree.class_field_desc = | Pcf_inherit of override_flag * class_expr * string loc option| Pcf_val of label loc * mutable_flag * class_field_kind(*Pcf_val(x,flag, kind)represents:val x = EwhenflagisImmutableandkindisCfk_concrete(Fresh, E)val virtual x: TwhenflagisImmutableandkindisCfk_virtual(T)val mutable x = EwhenflagisMutableandkindisCfk_concrete(Fresh, E)val mutable virtual x: TwhenflagisMutableandkindisCfk_virtual(T)
| Pcf_method of label loc * private_flag * class_field_kind| Pcf_constraint of core_type * core_type(*
*)constraint T1 = T2| Pcf_initializer of expression(*
*)initializer E| Pcf_attribute of attribute(*
*)[@@@id]| Pcf_extension of extension(*
*)[%%id]
and class_field_kind = Astlib.Ast_500.Parsetree.class_field_kind = | Cfk_virtual of core_type| Cfk_concrete of override_flag * expression
and class_declaration = class_expr class_infosModule language
Type expressions for the module language
and module_type = Astlib.Ast_500.Parsetree.module_type = {pmty_desc : module_type_desc;pmty_loc : location;pmty_attributes : attributes;(*
*)... [@id1] [@id2]
}and module_type_desc = Astlib.Ast_500.Parsetree.module_type_desc = | Pmty_ident of longident_loc(*
*)Pmty_ident(S)representsS| Pmty_signature of signature(*
*)sig ... end| Pmty_functor of functor_parameter * module_type(*
*)functor(X : MT1) -> MT2| Pmty_with of module_type * with_constraint list(*
*)MT with ...| Pmty_typeof of module_expr(*
*)module type of ME| Pmty_extension of extension(*
*)[%id]| Pmty_alias of longident_loc(*
*)(module M)
and functor_parameter = Astlib.Ast_500.Parsetree.functor_parameter = | Unit(*
*)()| Named of string option loc * module_type(*Named(name, MT)represents:(X : MT)whennameisSome X,(_ : MT)whennameisNone
and signature = signature_item listand signature_item = Astlib.Ast_500.Parsetree.signature_item = {psig_desc : signature_item_desc;psig_loc : location;
}and signature_item_desc = Astlib.Ast_500.Parsetree.signature_item_desc = | Psig_value of value_description(*val x: Texternal x: T = "s1" ... "sn"
| Psig_type of rec_flag * type_declaration list(*
*)type t1 = ... and ... and tn = ...| Psig_typesubst of type_declaration list(*
*)type t1 := ... and ... and tn := ...| Psig_typext of type_extension(*
*)type t1 += ...| Psig_exception of type_exception(*
*)exception C of T| Psig_module of module_declaration(*
*)module X = Mandmodule X : MT| Psig_modsubst of module_substitution(*
*)module X := M| Psig_recmodule of module_declaration list(*
*)module rec X1 : MT1 and ... and Xn : MTn| Psig_modtype of module_type_declaration(*
*)module type S = MTandmodule type S| Psig_modtypesubst of module_type_declaration(*
*)module type S := ...| Psig_open of open_description(*
*)open X| Psig_include of include_description(*
*)include MT| Psig_class of class_description list(*
*)class c1 : ... and ... and cn : ...| Psig_class_type of class_type_declaration list(*
*)class type ct1 = ... and ... and ctn = ...| Psig_attribute of attribute(*
*)[@@@id]| Psig_extension of extension * attributes(*
*)[%%id]
and module_declaration = Astlib.Ast_500.Parsetree.module_declaration = {pmd_name : string option loc;pmd_type : module_type;pmd_attributes : attributes;(*
*)... [@@id1] [@@id2]pmd_loc : location;
}Values of type module_declaration represents S : MT
and module_substitution = Astlib.Ast_500.Parsetree.module_substitution = {pms_name : string loc;pms_manifest : longident_loc;pms_attributes : attributes;(*
*)... [@@id1] [@@id2]pms_loc : location;
}Values of type module_substitution represents S := M
and module_type_declaration = Astlib.Ast_500.Parsetree.module_type_declaration =
{pmtd_name : string loc;pmtd_type : module_type option;pmtd_attributes : attributes;(*
*)... [@@id1] [@@id2]pmtd_loc : location;
}Values of type module_type_declaration represents:
S = MT,Sfor abstract module type declaration, whenpmtd_typeisNone.
and 'a open_infos = 'a Astlib.Ast_500.Parsetree.open_infos = {popen_expr : 'a;popen_override : override_flag;popen_loc : location;popen_attributes : attributes;
}Values of type 'a open_infos represents:
open! Xwhenpopen_overrideisOverride(silences the "used identifier shadowing" warning)open Xwhenpopen_overrideisFresh
and open_description = longident_loc open_infosValues of type open_description represents:
open M.Nopen M(N).O
and open_declaration = module_expr open_infosValues of type open_declaration represents:
open M.Nopen M(N).Oopen struct ... end
and 'a include_infos = 'a Astlib.Ast_500.Parsetree.include_infos = {pincl_mod : 'a;pincl_loc : location;pincl_attributes : attributes;
}and include_description = module_type include_infosValues of type include_description represents include MT
and include_declaration = module_expr include_infosValues of type include_declaration represents include ME
and with_constraint = Astlib.Ast_500.Parsetree.with_constraint = | Pwith_type of longident_loc * type_declaration(*with type X.t = ...Note: the last component of the longident must match the name of the type_declaration.
*)| Pwith_module of longident_loc * longident_loc(*
*)with module X.Y = Z| Pwith_modtype of longident_loc * module_type(*
*)with module type X.Y = Z| Pwith_modtypesubst of longident_loc * module_type(*
*)with module type X.Y := sig end| Pwith_typesubst of longident_loc * type_declaration(*
*)with type X.t := ..., same format as [Pwith_type]| Pwith_modsubst of longident_loc * longident_loc(*
*)with module X.Y := Z
Value expressions for the module language
and module_expr = Astlib.Ast_500.Parsetree.module_expr = {pmod_desc : module_expr_desc;pmod_loc : location;pmod_attributes : attributes;(*
*)... [@id1] [@id2]
}and module_expr_desc = Astlib.Ast_500.Parsetree.module_expr_desc = | Pmod_ident of longident_loc(*
*)X| Pmod_structure of structure(*
*)struct ... end| Pmod_functor of functor_parameter * module_expr(*
*)functor(X : MT1) -> ME| Pmod_apply of module_expr * module_expr(*
*)ME1(ME2)| Pmod_constraint of module_expr * module_type(*
*)(ME : MT)| Pmod_unpack of expression(*
*)(val E)| Pmod_extension of extension(*
*)[%id]
and structure = structure_item listand structure_item = Astlib.Ast_500.Parsetree.structure_item = {pstr_desc : structure_item_desc;pstr_loc : location;
}and structure_item_desc = Astlib.Ast_500.Parsetree.structure_item_desc = | Pstr_eval of expression * attributes(*
*)E| Pstr_value of rec_flag * value_binding list(*Pstr_value(rec, [(P1, E1 ; ... ; (Pn, En))])represents:let P1 = E1 and ... and Pn = ENwhenrecisNonrecursive,let rec P1 = E1 and ... and Pn = ENwhenrecisRecursive.
| Pstr_primitive of value_description(*val x: Texternal x: T = "s1" ... "sn"
| Pstr_type of rec_flag * type_declaration list(*
*)type t1 = ... and ... and tn = ...| Pstr_typext of type_extension(*
*)type t1 += ...| Pstr_exception of type_exception(*exception C of Texception C = M.X
| Pstr_module of module_binding(*
*)module X = ME| Pstr_recmodule of module_binding list(*
*)module rec X1 = ME1 and ... and Xn = MEn| Pstr_modtype of module_type_declaration(*
*)module type S = MT| Pstr_open of open_declaration(*
*)open X| Pstr_class of class_declaration list(*
*)class c1 = ... and ... and cn = ...| Pstr_class_type of class_type_declaration list(*
*)class type ct1 = ... and ... and ctn = ...| Pstr_include of include_declaration(*
*)include ME| Pstr_attribute of attribute(*
*)[@@@id]| Pstr_extension of extension * attributes(*
*)[%%id]
and value_binding = Astlib.Ast_500.Parsetree.value_binding = {pvb_pat : pattern;pvb_expr : expression;pvb_attributes : attributes;pvb_loc : location;
}and module_binding = Astlib.Ast_500.Parsetree.module_binding = {pmb_name : string option loc;pmb_expr : module_expr;pmb_attributes : attributes;pmb_loc : location;
}Values of type module_binding represents module X = ME
Toplevel
Toplevel phrases
and toplevel_phrase = Astlib.Ast_500.Parsetree.toplevel_phrase = | Ptop_def of structure| Ptop_dir of toplevel_directive(*
*)#use,#load...
and toplevel_directive = Astlib.Ast_500.Parsetree.toplevel_directive = {pdir_name : string loc;pdir_arg : directive_argument option;pdir_loc : location;
}and directive_argument = Astlib.Ast_500.Parsetree.directive_argument = {pdira_desc : directive_argument_desc;pdira_loc : location;
}and directive_argument_desc = Astlib.Ast_500.Parsetree.directive_argument_desc =
| Pdir_string of string| Pdir_int of string * char option| Pdir_ident of longident| Pdir_bool of bool
and cases = case listclass virtual map : object ... endclass virtual iter : object ... endclass virtual 'acc fold : object ... endclass virtual 'acc fold_map : object ... endclass virtual 'ctx map_with_context : object ... endclass virtual 'res lift : object ... endclass virtual ['ctx, 'res] lift_map_with_context : object ... end