-
Notifications
You must be signed in to change notification settings - Fork 125
/
pass_LambdaLifting.mli
60 lines (46 loc) · 1.74 KB
/
pass_LambdaLifting.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
(*
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/>.
*)
(*
@author Sebastien Briais
*)
(** Lambda Lifting of typed QML code
References:
Lambda lifting in quadratic time
Olivier Danvy, Ulrik Schultz
ML-Style Typing, Lambda Lifting and Partial Evaluation
Peter Thiemann
*)
(** prerequisite: identifiers are defined only once
[in other words, name analysis has been done]
no coercions
no "let type ... in ..."
@raise QmlTypes.Exception Check if this exception is really raised
@raise QmlTyperException.Exception Check if this exception is really raised
*)
val process_code:
early:bool ->
side:[`client | `server] ->
typed:bool ->
(* typed mode preserves types but it also needs types everywhere in the annotmap
* untyped mode works on a broken annotmap and breaks it even more *)
QmlTypes.gamma ->
QmlAst.annotmap ->
QmlAst.code ->
(QmlTypes.gamma * QmlAst.annotmap) * QmlAst.code
(* fun_action works in an untyped way, and 'lifts' only parts of the code in a very
* specific way not to introduce partial applications *)
val process_code_fun_action:
QmlAst.annotmap ->
QmlAst.code ->
QmlAst.annotmap * QmlAst.code