package ocaml-base-compiler
-
bigarray
-
dynlink
-
ocamlbytecomp
-
ocamlcommon
-
ocamlmiddleend
-
ocamloptcomp
-
odoc_info
-
stdlib
-
str
-
unix
Library
Module
Module type
Parameter
Class
Class type
Abstract syntax tree after typing
By comparison with Parsetree
:
- Every
Longindent
.t is accompanied by a resolvedPath.t
.
Extension points
type attribute = Parsetree.attribute
type attributes = attribute list
Core language
type _ pattern_category =
| Value : value pattern_category
| Computation : computation pattern_category
type pattern = value general_pattern
and 'k general_pattern = 'k pattern_desc pattern_data
and '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
*)disjunction
is 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 * (Ident.t Asttypes.loc list * core_type) option -> value pattern_desc
(*C (, None) C P (
*)P
, None) C (P1, ..., Pn) (P1; ...; Pn
, None) C (P : t) (P
, Some (, t)) C (P1, ..., Pn : t) (P1; ...; Pn
, Some (, t)) C (type a) (P : t) (P
, Some (a
, t)) C (type a) (P1, ..., Pn : t) (P1; ...; Pn
, Some (a
, t))| 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_pattern
function below instead of using theTpat_value
constructor 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 _
,None
otherwise.
and tpat_value_argument = private value general_pattern
and 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_fun
andPexp_function
both translate toTexp_function
. SeeParsetree
for more details.param
is the identifier that is to be used to name the parameter of the function.partial =
*)Partial
if the pattern match is partialTotal
otherwise.| 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
*)E
C (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=P2
is 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
| Texp_new of Path.t * Longident.t Asttypes.loc * Types.class_declaration
| Texp_instvar of Path.t * Path.t * string Asttypes.loc
<