-
Notifications
You must be signed in to change notification settings - Fork 125
/
flat_Common.mli
146 lines (116 loc) · 3.17 KB
/
flat_Common.mli
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
143
144
145
146
(*
Copyright © 2011 MLstate
This file is part of OPA.
OPA is free software: you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License, version 3, as published by
the Free Software Foundation.
OPA is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
more details.
You should have received a copy of the GNU Affero General Public License
along with OPA. If not, see <http://www.gnu.org/licenses/>.
*)
(**
Flat Compiler : Common utils
@author Mathieu Barbin
*)
(**
The type of an expression accessing a function of the serverlib
*)
type primitive = Ocaml.expr
(** {6 ServerLib} *)
(**
Utils for interfacing with the QmlFlatServerLib.
Keep synchronous.
*)
(**
The name of the main module of the flat runtime.
Use it only for string generation. If you are manipulating
ocaml ast, use directly the module ServerLib.
*)
val serverlib : string
module ServerLib :
sig
module Field :
sig
val register : primitive
end
module FieldAccess :
sig
val make_cache : primitive
end
module VTable :
sig
val register : primitive
end
module Simple :
sig
val register : primitive
end
val runtime_error : primitive
val unwrap_record : primitive
val get_vtable : primitive
val empty : primitive
val true_ : primitive
val false_ : primitive
val wrap_bool : primitive
val unwrap_bool : primitive
val none : primitive
val some : primitive
val unwrap_option : primitive
val dot : primitive
val dot_opt : primitive
val unsafe_get : primitive
val dot_with_cache : primitive
val extend_with_array : primitive
val unsafe_init_static : primitive
val may_be_simple : primitive
val do_exit : primitive
end
(** {6 Shared Stuff} *)
(**
The type of fields name
*)
type label = string
(**
The type used in OcamlAst for a new let-binding
*)
type let_definition = Ocaml.expr
(**
The type used in OcamlAst for an expression composed on an identifier
refering to one of previously defined field
*)
type expr = Ocaml.expr
(**
The type you can get when you build ocaml label.
You should put in the generated code the definition
before accessing it using the identifier.
*)
type shared_variable =
| NewVar of let_definition * expr
| Var of expr
(**
Generation of ocaml identifiers.
As we want to patch OcamlAst for beeing able to perform some analysis,
we may rather pass through there for generating ocaml ident, pat, and params.
*)
module FCons :
sig
type ident = Ident.t
(**
Simple traduction from qml const into ocaml const
*)
val const : QmlAst.const_expr -> Ocaml.const_expr
val pat : ident -> Ocaml.pattern
val param : ident -> Ocaml.param_formel
val var : ident -> Ocaml.expr
val patas : Ocaml.pattern -> ident -> Ocaml.pattern
(** combinaison *)
val param_var :
ident -> Ocaml.param_formel * Ocaml.expr
val pat_var :
ident -> Ocaml.pattern * Ocaml.expr
val param_pat_var :
ident -> Ocaml.param_formel * Ocaml.pattern * Ocaml.expr
end