blob: d55c6f868e002614f7078f8b7ee9507d332ec352 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
(* Abstract syntax tree produced by parsing *)
open Asttypes
(* Type expressions for the core language *)
type core_type =
{ ptyp_desc: core_type_desc;
ptyp_loc: Location.t }
and core_type_desc =
Ptyp_var of string
| Ptyp_arrow of core_type * core_type
| Ptyp_tuple of core_type list
| Ptyp_constr of Longident.t * core_type list
(* Value expressions for the core language *)
type pattern =
{ ppat_desc: pattern_desc;
ppat_loc: Location.t }
and pattern_desc =
Ppat_any
| Ppat_var of string
| Ppat_alias of pattern * string
| Ppat_constant of constant
| Ppat_tuple of pattern list
| Ppat_construct of Longident.t * pattern option
| Ppat_record of (Longident.t * pattern) list
| Ppat_or of pattern * pattern
| Ppat_constraint of pattern * core_type
type expression =
{ pexp_desc: expression_desc;
pexp_loc: Location.t }
and expression_desc =
Pexp_ident of Longident.t
| Pexp_constant of constant
| Pexp_let of rec_flag * (pattern * expression) list * expression
| Pexp_function of (pattern * expression) list
| Pexp_apply of expression * expression list
| Pexp_match of expression * (pattern * expression) list
| Pexp_try of expression * (pattern * expression) list
| Pexp_tuple of expression list
| Pexp_construct of Longident.t * expression option
| Pexp_record of (Longident.t * expression) list
| Pexp_field of expression * Longident.t
| Pexp_setfield of expression * Longident.t * expression
| Pexp_array of expression list
| Pexp_ifthenelse of expression * expression * expression option
| Pexp_sequence of expression * expression
| Pexp_while of expression * expression
| Pexp_for of string * expression * expression * direction_flag * expression
| Pexp_constraint of expression * core_type
| Pexp_when of expression * expression
(* Value descriptions *)
type value_description =
{ pval_type: core_type;
pval_prim: string option }
(* Type declarations *)
type type_declaration =
{ ptype_params: string list;
ptype_kind: type_kind;
ptype_loc: Location.t }
and type_kind =
Ptype_abstract
| Ptype_manifest of core_type
| Ptype_variant of (string * core_type list) list
| Ptype_record of (string * mutable_flag * core_type) list
type exception_declaration = core_type list
(* Type expressions for the module language *)
type module_type =
{ pmty_desc: module_type_desc;
pmty_loc: Location.t }
and module_type_desc =
Pmty_ident of Longident.t
| Pmty_signature of signature
| Pmty_functor of string * module_type * module_type
| Pmty_with of module_type * (string * type_declaration) list
and signature = signature_item list
and signature_item =
Psig_value of string * value_description
| Psig_type of (string * type_declaration) list
| Psig_exception of string * exception_declaration
| Psig_module of string * module_type
| Psig_modtype of string * modtype_declaration
| Psig_open of Longident.t * Location.t
| Psig_include of module_type
and modtype_declaration =
Pmodtype_abstract
| Pmodtype_manifest of module_type
(* Value expressions for the module language *)
type module_expr =
{ pmod_desc: module_expr_desc;
pmod_loc: Location.t }
and module_expr_desc =
Pmod_ident of Longident.t
| Pmod_structure of structure
| Pmod_functor of string * module_type * module_expr
| Pmod_apply of module_expr * module_expr
| Pmod_constraint of module_expr * module_type
and structure = structure_item list
and structure_item =
Pstr_eval of expression
| Pstr_value of rec_flag * (pattern * expression) list
| Pstr_primitive of string * value_description
| Pstr_type of (string * type_declaration) list
| Pstr_exception of string * exception_declaration
| Pstr_module of string * module_expr
| Pstr_modtype of string * module_type
| Pstr_open of Longident.t * Location.t
(* Toplevel phrases *)
type toplevel_phrase =
Ptop_def of structure
| Ptop_dir of string * directive_argument
and directive_argument =
Pdir_none
| Pdir_string of string
| Pdir_int of int
| Pdir_ident of Longident.t
|