package ocaml-base-compiler
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=044a2a68f6cfa3d2349257770a340ced14c3940fb4d78414dda0e59e4ff0aa09
doc/ocamlcommon/Typedtree/index.html
Module Typedtree
Abstract syntax tree after typing
By comparison with Parsetree:
- Every
Longindent.tis accompanied by a resolvedPath.t.
Extension points
type attribute = Parsetree.attributetype attributes = attribute listCore language
type _ pattern_category = | Value : value pattern_category| Computation : computation pattern_category
type pattern = value general_patternand 'k general_pattern = 'k pattern_desc pattern_dataand 'a pattern_data = {pat_desc : 'a;pat_loc : Location.t;pat_extra : (pat_extra * Location.t * attributes) list;pat_type : Types.type_expr;pat_env : Env.t;pat_attributes : attributes;
}and pat_extra = | Tpat_constraint of core_type(*P : T
*)pat_desc = P ; pat_extra = (Tpat_constraint T, _, _) :: ...| Tpat_type of Path.t * Longident.t Asttypes.loc(*#tconst
pat_desc = disjunction ; pat_extra = (Tpat_type (P, "tconst"), _, _) :: ...where
*)disjunctionis aTpat_or _representing the branches oftconst.| Tpat_open of Path.t * Longident.t Asttypes.loc * Env.t| Tpat_unpack(*(module P)
*)pat_desc = Tpat_var "P" ; pat_extra = (Tpat_unpack, _, _) :: ...
and 'k pattern_desc = | Tpat_any : value pattern_desc(*_
*)| Tpat_var : Ident.t * string Asttypes.loc -> value pattern_desc(*x
*)| Tpat_alias : value general_pattern * Ident.t * string Asttypes.loc -> value pattern_desc(*P as a
*)| Tpat_constant : Asttypes.constant -> value pattern_desc(*1, 'a', "true", 1.0, 1l, 1L, 1n
*)| Tpat_tuple : value general_pattern list -> value pattern_desc(*(P1, ..., Pn)
Invariant: n >= 2
*)| Tpat_construct : Longident.t Asttypes.loc * Types.constructor_description * value general_pattern list -> value pattern_desc(*C C P
*)PC (P1, ..., Pn)P1; ...; Pn| Tpat_variant : Asttypes.label * value general_pattern option * Types.row_desc ref -> value pattern_desc| Tpat_record : (Longident.t Asttypes.loc * Types.label_description * value general_pattern) list * Asttypes.closed_flag -> value pattern_desc(*l1=P1; ...; ln=Pn(flag = Closed)l1=P1; ...; ln=Pn; _(flag = Open)Invariant: n > 0
*)| Tpat_array : value general_pattern list -> value pattern_desc(*
*)| P1; ...; Pn || Tpat_lazy : value general_pattern -> value pattern_desc(*lazy P
*)| Tpat_value : tpat_value_argument -> computation pattern_desc(*P
Invariant: Tpat_value pattern should not carry pat_attributes or pat_extra metadata coming from user syntax, which must be on the inner pattern node -- to facilitate searching for a certain value pattern constructor with a specific attributed.
To enforce this restriction, we made the argument of the Tpat_value constructor a private synonym of
*)pattern, requiring you to use theas_computation_patternfunction below instead of using theTpat_valueconstructor directly.| Tpat_exception : value general_pattern -> computation pattern_desc(*exception P
*)| Tpat_or : 'k general_pattern * 'k general_pattern * Types.row_desc option -> 'k pattern_desc(*P1 | P2
*)row_desc=Some _when translatingPpat_type _,Noneotherwise.
and tpat_value_argument = private value general_patternand expression = {exp_desc : expression_desc;exp_loc : Location.t;exp_extra : (exp_extra * Location.t * attributes) list;exp_type : Types.type_expr;exp_env : Env.t;exp_attributes : attributes;
}and expression_desc = | Texp_ident of Path.t * Longident.t Asttypes.loc * Types.value_description(*x M.x
*)| Texp_constant of Asttypes.constant(*1, 'a', "true", 1.0, 1l, 1L, 1n
*)| Texp_let of Asttypes.rec_flag * value_binding list * expression(*let P1 = E1 and ... and Pn = EN in E (flag = Nonrecursive) let rec P1 = E1 and ... and Pn = EN in E (flag = Recursive)
*)| Texp_function of {arg_label : Asttypes.arg_label;param : Ident.t;cases : value case list;partial : partial;
}(*Pexp_funandPexp_functionboth translate toTexp_function. SeeParsetreefor more details.paramis the identifier that is to be used to name the parameter of the function.partial =
*)Partialif the pattern match is partialTotalotherwise.| Texp_apply of expression * (Asttypes.arg_label * expression option) list(*E0 ~l1:E1 ... ~ln:En
The expression can be None if the expression is abstracted over this argument. It currently appears when a label is applied.
For example: let f x ~y = x + y in f ~y:3
The resulting typedtree for the application is: Texp_apply (Texp_ident "f/1037",
*)(Nolabel, None); (Labelled "y", Some (Texp_constant Const_int 3)))| Texp_match of expression * computation case list * partial(*match E0 with | P1 -> E1 | P2 | exception P3 -> E2 | exception P4 -> E3
*)Texp_match (E0, [(P1, E1); (P2 | exception P3, E2); (exception P4, E3)], _)| Texp_try of expression * value case list(*try E with P1 -> E1 | ... | PN -> EN
*)| Texp_tuple of expression list(*(E1, ..., EN)
*)| Texp_construct of Longident.t Asttypes.loc * Types.constructor_description * expression list(*C C E
*)EC (E1, ..., En)E1;...;En| Texp_variant of Asttypes.label * expression option| Texp_record of {fields : (Types.label_description * record_label_definition) array;representation : Types.record_representation;extended_expression : expression option;
}(*l1=P1; ...; ln=Pn(extended_expression = None)E0 with l1=P1; ...; ln=Pn(extended_expression = Some E0)Invariant: n > 0
If the type is
*)l1: t1; l2: t2, the expressionE0 with t2=P2is represented as Texp_recordfields = [| l1, Kept t1; l2 Override P2 |]; representation; extended_expression = Some E0| Texp_field of expression * Longident.t Asttypes.loc * Types.label_description| Texp_setfield of expression * Longident.t Asttypes.loc * Types.label_description * expression| Texp_array of expression list| Texp_ifthenelse of expression * expression * expression option| Texp_sequence of expression * expression| Texp_while of expression * expression| Texp_for of Ident.t * Parsetree.pattern * expression * expression * Asttypes.direction_flag * expression| Texp_send of expression * meth * expression option| Texp_new of Path.t * Longident.t Asttypes.loc * Types.class_declaration| Texp_instvar of Path.t * Path.t * string Asttypes.loc| Texp_setinstvar of Path.t * Path.t * string Asttypes.loc * expression| Texp_override of Path.t * (Path.t * string Asttypes.loc * expression) list| Texp_letmodule of Ident.t option * string option Asttypes.loc * Types.module_presence * module_expr * expression| Texp_letexception of extension_constructor * expression| Texp_assert of expression| Texp_lazy of expression| Texp_object of class_structure * string list| Texp_pack of module_expr| Texp_letop of {let_ : binding_op;ands : binding_op list;param : Ident.t;body : value case;partial : partial;
}| Texp_unreachable| Texp_extension_constructor of Longident.t Asttypes.loc * Path.t| Texp_open of open_declaration * expression(*let open
*)!M in e
and record_label_definition = | Kept of Types.type_expr| Overridden of Longident.t Asttypes.loc * expression
and binding_op = {bop_op_path : Path.t;bop_op_name : string Asttypes.loc;bop_op_val : Types.value_description;bop_op_type : Types.type_expr;bop_exp : expression;bop_loc : Location.t;
}and class_expr = {cl_desc : class_expr_desc;cl_loc : Location.t;cl_type : Types.class_type;cl_env : Env.t;cl_attributes : attributes;
}and class_expr_desc = | Tcl_ident of Path.t * Longident.t Asttypes.loc * core_type list| Tcl_structure of class_structure| Tcl_fun of Asttypes.arg_label * pattern * (Ident.t * expression) list * class_expr * partial| Tcl_apply of class_expr * (Asttypes.arg_label * expression option) list| Tcl_let of Asttypes.rec_flag * value_binding list * (Ident.t * expression) list * class_expr| Tcl_constraint of class_expr * class_type option * string list * string list * Types.Concr.t| Tcl_open of open_description * class_expr
and class_structure = {cstr_self : pattern;cstr_fields : class_field list;cstr_type : Types.class_signature;cstr_meths : Ident.t Types.Meths.t;
}and class_field_kind = | Tcfk_virtual of core_type| Tcfk_concrete of Asttypes.override_flag * expression
and class_field_desc = | Tcf_inherit of Asttypes.override_flag * class_expr * string option * (string * Ident.t) list * (string * Ident.t) list| Tcf_val of string Asttypes.loc * Asttypes.mutable_flag * Ident.t * class_field_kind * bool| Tcf_method of string Asttypes.loc * Asttypes.private_flag * class_field_kind| Tcf_constraint of core_type * core_type| Tcf_initializer of expression| Tcf_attribute of attribute
and module_expr = {mod_desc : module_expr_desc;mod_loc : Location.t;mod_type : Types.module_type;mod_env : Env.t;mod_attributes : attributes;
}and module_type_constraint = | Tmodtype_implicit(*The module type constraint has been synthesized during typechecking.
*)| Tmodtype_explicit of module_type(*The module type was in the source file.
*)
Annotations for Tmod_constraint.
and module_expr_desc = | Tmod_ident of Path.t * Longident.t Asttypes.loc| Tmod_structure of structure| Tmod_functor of functor_parameter * module_expr| Tmod_apply of module_expr * module_expr * module_coercion| Tmod_constraint of module_expr * Types.module_type * module_type_constraint * module_coercion(*ME (constraint = Tmodtype_implicit) (ME : MT) (constraint = Tmodtype_explicit MT)
*)| Tmod_unpack of expression * Types.module_type
and structure_item_desc = | Tstr_eval of expression * attributes| Tstr_value of Asttypes.rec_flag * value_binding list| Tstr_primitive of value_description| Tstr_type of Asttypes.rec_flag * type_declaration list| Tstr_typext of type_extension| Tstr_exception of type_exception| Tstr_module of module_binding| Tstr_recmodule of module_binding list| Tstr_modtype of module_type_declaration| Tstr_open of open_declaration| Tstr_class of (class_declaration * string list) list| Tstr_class_type of (Ident.t * string Asttypes.loc * class_type_declaration) list| Tstr_include of include_declaration| Tstr_attribute of attribute
and module_binding = {mb_id : Ident.t option;mb_name : string option Asttypes.loc;mb_presence : Types.module_presence;mb_expr : module_expr;mb_attributes : attributes;mb_loc : Location.t;
}and value_binding = {vb_pat : pattern;vb_expr : expression;vb_attributes : attributes;vb_loc : Location.t;
}and module_coercion = | Tcoerce_none| Tcoerce_structure of (int * module_coercion) list * (Ident.t * int * module_coercion) list| Tcoerce_functor of module_coercion * module_coercion| Tcoerce_primitive of primitive_coercion| Tcoerce_alias of Env.t * Path.t * module_coercion
and module_type = {mty_desc : module_type_desc;mty_type : Types.module_type;mty_env : Env.t;mty_loc : Location.t;mty_attributes : attributes;
}and module_type_desc = | Tmty_ident of Path.t * Longident.t Asttypes.loc| Tmty_signature of signature| Tmty_functor of functor_parameter * module_type| Tmty_with of module_type * (Path.t * Longident.t Asttypes.loc * with_constraint) list| Tmty_typeof of module_expr| Tmty_alias of Path.t * Longident.t Asttypes.loc
and primitive_coercion = {pc_desc : Primitive.description;pc_type : Types.type_expr;pc_env : Env.t;pc_loc : Location.t;
}and signature_item_desc = | Tsig_value of value_description| Tsig_type of Asttypes.rec_flag * type_declaration list| Tsig_typesubst of type_declaration list| Tsig_typext of type_extension| Tsig_exception of type_exception| Tsig_module of module_declaration| Tsig_modsubst of module_substitution| Tsig_recmodule of module_declaration list| Tsig_modtype of module_type_declaration| Tsig_open of open_description| Tsig_include of include_description| Tsig_class of class_description list| Tsig_class_type of class_type_declaration list| Tsig_attribute of attribute
and module_declaration = {md_id : Ident.t option;md_name : string option Asttypes.loc;md_presence : Types.module_presence;md_type : module_type;md_attributes : attributes;md_loc : Location.t;
}and module_substitution = {ms_id : Ident.t;ms_name : string Asttypes.loc;ms_manifest : Path.t;ms_txt : Longident.t Asttypes.loc;ms_attributes : attributes;ms_loc : Location.t;
}and module_type_declaration = {mtd_id : Ident.t;mtd_name : string Asttypes.loc;mtd_type : module_type option;mtd_attributes : attributes;mtd_loc : Location.t;
}and 'a open_infos = {open_expr : 'a;open_bound_items : Types.signature;open_override : Asttypes.override_flag;open_env : Env.t;open_loc : Location.t;open_attributes : attribute list;
}and open_description = (Path.t * Longident.t Asttypes.loc) open_infosand open_declaration = module_expr open_infosand 'a include_infos = {incl_mod : 'a;incl_type : Types.signature;incl_loc : Location.t;incl_attributes : attribute list;
}and include_description = module_type include_infosand include_declaration = module_expr include_infosand with_constraint = | Twith_type of type_declaration| Twith_module of Path.t * Longident.t Asttypes.loc| Twith_typesubst of type_declaration| Twith_modsubst of Path.t * Longident.t Asttypes.loc
and core_type = {mutable ctyp_desc : core_type_desc;(*mutable because of
*)Typeclass.declare_methodmutable ctyp_type : Types.type_expr;(*mutable because of
*)Typeclass.declare_methodctyp_env : Env.t;ctyp_loc : Location.t;ctyp_attributes : attributes;
}and core_type_desc = | Ttyp_any| Ttyp_var of string| Ttyp_arrow of Asttypes.arg_label * core_type * core_type| Ttyp_tuple of core_type list| Ttyp_constr of Path.t * Longident.t Asttypes.loc * core_type list| Ttyp_object of object_field list * Asttypes.closed_flag| Ttyp_class of Path.t * Longident.t Asttypes.loc * core_type list| Ttyp_alias of core_type * string| Ttyp_variant of row_field list * Asttypes.closed_flag * Asttypes.label list option| Ttyp_poly of string list * core_type| Ttyp_package of package_type
and package_type = {pack_path : Path.t;pack_fields : (Longident.t Asttypes.loc * core_type) list;pack_type : Types.module_type;pack_txt : Longident.t Asttypes.loc;
}and value_description = {val_id : Ident.t;val_name : string Asttypes.loc;val_desc : core_type;val_val : Types.value_description;val_prim : string list;val_loc : Location.t;val_attributes : attributes;
}and type_declaration = {typ_id : Ident.t;typ_name : string Asttypes.loc;typ_params : (core_type * Asttypes.variance) list;typ_type : Types.type_declaration;typ_cstrs : (core_type * core_type * Location.t) list;typ_kind : type_kind;typ_private : Asttypes.private_flag;typ_manifest : core_type option;typ_loc : Location.t;typ_attributes : attributes;
}and type_kind = | Ttype_abstract| Ttype_variant of constructor_declaration list| Ttype_record of label_declaration list| Ttype_open
and label_declaration = {ld_id : Ident.t;ld_name : string Asttypes.loc;ld_mutable : Asttypes.mutable_flag;ld_type : core_type;ld_loc : Location.t;ld_attributes : attributes;
}and constructor_declaration = {cd_id : Ident.t;cd_name : string Asttypes.loc;cd_args : constructor_arguments;cd_res : core_type option;cd_loc : Location.t;cd_attributes : attributes;
}and type_extension = {tyext_path : Path.t;tyext_txt : Longident.t Asttypes.loc;tyext_params : (core_type * Asttypes.variance) list;tyext_constructors : extension_constructor list;tyext_private : Asttypes.private_flag;tyext_loc : Location.t;tyext_attributes : attributes;
}and type_exception = {tyexn_constructor : extension_constructor;tyexn_loc : Location.t;tyexn_attributes : attribute list;
}and extension_constructor = {ext_id : Ident.t;ext_name : string Asttypes.loc;ext_type : Types.extension_constructor;ext_kind : extension_constructor_kind;ext_loc : Location.t;ext_attributes : attributes;
}and extension_constructor_kind = | Text_decl of constructor_arguments * core_type option| Text_rebind of Path.t * Longident.t Asttypes.loc
and class_type = {cltyp_desc : class_type_desc;cltyp_type : Types.class_type;cltyp_env : Env.t;cltyp_loc : Location.t;cltyp_attributes : attributes;
}and class_type_desc = | Tcty_constr of Path.t * Longident.t Asttypes.loc * core_type list| Tcty_signature of class_signature| Tcty_arrow of Asttypes.arg_label * core_type * class_type| Tcty_open of open_description * class_type
and class_signature = {csig_self : core_type;csig_fields : class_type_field list;csig_type : Types.class_signature;
}and class_type_field = {ctf_desc : class_type_field_desc;ctf_loc : Location.t;ctf_attributes : attributes;
}and class_type_field_desc = | Tctf_inherit of class_type| Tctf_val of string * Asttypes.mutable_flag * Asttypes.virtual_flag * core_type| Tctf_method of string * Asttypes.private_flag * Asttypes.virtual_flag * core_type| Tctf_constraint of core_type * core_type| Tctf_attribute of attribute
and class_declaration = class_expr class_infosand class_description = class_type class_infosand class_type_declaration = class_type class_infosand 'a class_infos = {ci_virt : Asttypes.virtual_flag;ci_params : (core_type * Asttypes.variance) list;ci_id_name : string Asttypes.loc;ci_id_class : Ident.t;ci_id_class_type : Ident.t;ci_id_object : Ident.t;ci_id_typehash : Ident.t;ci_expr : 'a;ci_decl : Types.class_declaration;ci_type_decl : Types.class_type_declaration;ci_loc : Location.t;ci_attributes : attributes;
}val as_computation_pattern : pattern -> computation general_patternas_computation_pattern p is a computation pattern with description Tpat_value p, which enforces a correct placement of pat_attributes and pat_extra metadata (on the inner value pattern, rather than on the computation pattern).
val classify_pattern_desc : 'k pattern_desc -> 'k pattern_categoryval classify_pattern : 'k general_pattern -> 'k pattern_categoryval shallow_iter_pattern_desc : pattern_action -> 'k pattern_desc -> unitval shallow_map_pattern_desc :
pattern_transformation ->
'k pattern_desc ->
'k pattern_descval iter_general_pattern : pattern_action -> 'k general_pattern -> unitval exists_general_pattern : pattern_predicate -> 'k general_pattern -> boolval map_general_pattern :
pattern_transformation ->
'k general_pattern ->
'k general_patternbottom-up mapping of patterns: the transformation function is called on the children before being called on the parent
val let_bound_idents : value_binding list -> Ident.t listval let_bound_idents_full :
value_binding list ->
(Ident.t * string Asttypes.loc * Types.type_expr) listval alpha_pat :
(Ident.t * Ident.t) list ->
'k general_pattern ->
'k general_patternAlpha conversion of patterns
val mknoloc : 'a -> 'a Asttypes.locval mkloc : 'a -> Location.t -> 'a Asttypes.locval pat_bound_idents : 'k general_pattern -> Ident.t listval pat_bound_idents_full :
'k general_pattern ->
(Ident.t * string Asttypes.loc * Types.type_expr) listval split_pattern :
computation general_pattern ->
pattern option * pattern optionSplits an or pattern into its value (left) and exception (right) parts.