Import Upstream version 20180207
[hcoop/debian/mlton.git] / mlton / ast / ast-core.sig
CommitLineData
7f918cf1
CE
1(* Copyright (C) 2009,2012,2015,2017 Matthew Fluet.
2 * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh
3 * Jagannathan, and Stephen Weeks.
4 * Copyright (C) 1997-2000 NEC Research Institute.
5 *
6 * MLton is released under a BSD-style license.
7 * See the file MLton-LICENSE for details.
8 *)
9
10signature AST_CORE_STRUCTS =
11 sig
12 include AST_ATOMS
13 end
14
15signature AST_CORE =
16 sig
17 include AST_CORE_STRUCTS
18
19 structure Fixity:
20 sig
21 datatype t =
22 Infix of int option
23 | Infixr of int option
24 | Nonfix
25 val layout: t -> Layout.t
26 end
27
28 structure Fixop:
29 sig
30 datatype t = Op | None
31 end
32
33 structure Pat:
34 sig
35 type t
36
37 structure Item:
38 sig
39 type pat
40 datatype t =
41 Field of pat
42 | Vid of Vid.t * Type.t option * pat option
43 (* vid <:ty> <as pat> *)
44 end
45 sharing type Item.pat = t
46
47 datatype node =
48 App of Longcon.t * t
49 | Const of Const.t
50 | Constraint of t * Type.t
51 | FlatApp of t vector
52 | Layered of {constraint: Type.t option,
53 fixop: Fixop.t,
54 pat: t,
55 var: Var.t}
56 | List of t vector
57 | Paren of t
58 | Or of t vector
59 | Record of {flexible: bool,
60 items: (Record.Field.t * Region.t * Item.t) vector}
61 | Tuple of t vector
62 | Var of {fixop: Fixop.t,
63 name: Longvid.t}
64 | Vector of t vector
65 | Wild
66
67 include WRAPPED sharing type node' = node
68 sharing type obj = t
69
70 val constraint: t * Type.t -> t
71 val layered: {fixop: Fixop.t,
72 var: Var.t,
73 constraint: Type.t option,
74 pat: t} -> t
75 val layout: t -> Layout.t
76 val layoutFlatApp: t vector -> Layout.t
77 val longvid: Longvid.t -> t
78 val tuple: t vector -> t
79 val var: Var.t -> t
80 val wild: t
81 end
82
83 structure PrimKind:
84 sig
85 structure ImportExportAttribute:
86 sig
87 datatype t = Cdecl | External | Impure | Private | Public | Pure | Reentrant | Runtime | Stdcall
88
89 val layout: t -> Layout.t
90 end
91
92 structure SymbolAttribute:
93 sig
94 datatype t = Alloc | External | Private | Public
95
96 val layout: t -> Layout.t
97 end
98
99 datatype t =
100 Address of {attributes: SymbolAttribute.t list,
101 name: string,
102 ty: Type.t}
103 | BuildConst of {name: string,
104 ty: Type.t}
105 | CommandLineConst of {name: string,
106 ty: Type.t,
107 value: Const.t}
108 | Const of {name: string,
109 ty: Type.t}
110 | Export of {attributes: ImportExportAttribute.t list,
111 name: string,
112 ty: Type.t}
113 | IImport of {attributes: ImportExportAttribute.t list,
114 ty: Type.t}
115 | Import of {attributes: ImportExportAttribute.t list,
116 name: string,
117 ty: Type.t}
118 | ISymbol of {ty: Type.t}
119 | Prim of {name: string,
120 ty: Type.t}
121 | Symbol of {attributes: SymbolAttribute.t list,
122 name: string,
123 ty: Type.t}
124 end
125
126 structure Priority:
127 sig
128 datatype t = T of int option
129 val <= : t * t -> bool
130 val default: t
131 val layout: t -> Layout.t
132 end
133
134 structure Exp:
135 sig
136 type dec
137 type match
138 type t
139 datatype node =
140 Andalso of t * t
141 | App of t * t
142 | Case of t * match
143 | Const of Const.t
144 | Constraint of t * Type.t
145 | FlatApp of t vector
146 | Fn of match
147 | Handle of t * match
148 | If of t * t * t
149 | Let of dec * t
150 | List of t vector
151 | Orelse of t * t
152 | Paren of t
153 | Prim of PrimKind.t
154 | Raise of t
155 | Record of (Region.t * t) Record.t
156 | Selector of Record.Field.t
157 | Seq of t vector
158 | Var of {fixop: Fixop.t,
159 name: Longvid.t}
160 | Vector of t vector
161 | While of {expr: t,
162 test: t}
163
164 include WRAPPED sharing type node' = node
165 sharing type obj = t
166
167 val app: t * t -> t
168 val const: Const.t -> t
169 val constraint: t * Type.t -> t
170 val fnn: (Pat.t * t) vector -> t
171 val layout: t -> Layout.t
172 val lett: dec vector * t * Region.t -> t
173 val longvid: Longvid.t -> t
174 val tuple: t vector -> t
175 val unit: t
176 val var: Var.t -> t
177 end
178
179 structure Match:
180 sig
181 type t
182 datatype node = T of (Pat.t * Exp.t) vector
183 include WRAPPED sharing type node' = node
184 sharing type obj = t
185 val layout : t -> Layout.t
186 val layoutRule : Pat.t * Exp.t -> Layout.t
187 end
188 sharing type Exp.match = Match.t
189
190 structure EbRhs:
191 sig
192 type t
193 datatype node =
194 Def of Longcon.t
195 | Gen of Type.t option
196 include WRAPPED sharing type node' = node
197 sharing type obj = t
198 end
199
200 structure Dec:
201 sig
202 type t
203 datatype node =
204 Abstype of {datBind: DatBind.t,
205 body: t}
206 | Datatype of DatatypeRhs.t
207 | DoDec of Exp.t
208 | Exception of (Con.t * EbRhs.t) vector
209 | Fix of {fixity: Fixity.t,
210 ops: Vid.t vector}
211 | Fun of {tyvars: Tyvar.t vector,
212 fbs: {body: Exp.t,
213 pats: Pat.t vector,
214 resultType: Type.t option} vector vector}
215 | Local of t * t
216 | Open of Longstrid.t vector
217 | Overload of Priority.t *
218 Var.t *
219 Tyvar.t vector * Type.t *
220 Longvid.t vector
221 | SeqDec of t vector
222 | Type of TypBind.t
223 | Val of {rvbs: {match: Match.t,
224 pat: Pat.t} vector,
225 tyvars: Tyvar.t vector,
226 vbs: {exp: Exp.t,
227 pat: Pat.t} vector}
228 include WRAPPED sharing type node' = node
229 sharing type obj = t
230
231 val checkSyntax: t -> unit
232 val fromExp: Exp.t -> t
233 val layout: t -> Layout.t
234 val layoutFun:
235 {tyvars: Tyvar.t vector,
236 fbs: {body: Exp.t,
237 pats: Pat.t vector,
238 resultType: Type.t option} vector vector}
239 -> (unit -> Layout.t) vector
240 val layoutVal:
241 {rvbs: {match: Match.t,
242 pat: Pat.t} vector,
243 tyvars: Tyvar.t vector,
244 vbs: {exp: Exp.t,
245 pat: Pat.t} vector}
246 -> {rvbs: (unit -> Layout.t) vector,
247 vbs: (unit -> Layout.t) vector}
248 val openn: Longstrid.t vector -> t
249 val vall: Tyvar.t vector * Var.t * Exp.t -> t
250 end
251 sharing type Dec.t = Exp.dec
252 end