Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 62 lines (47 sloc) 1.875 kb
fccc685 Initial open-source release
MLstate authored
1 (*
2 Copyright © 2011 MLstate
3
4 This file is part of OPA.
5
6 OPA is free software: you can redistribute it and/or modify it under the
7 terms of the GNU Affero General Public License, version 3, as published by
8 the Free Software Foundation.
9
10 OPA is distributed in the hope that it will be useful, but WITHOUT ANY
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
13 more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with OPA. If not, see <http://www.gnu.org/licenses/>.
17 *)
18 (*
19 @author Sebastien Briais
20 *)
21
22 (** Lambda Lifting of typed QML code
23
24 References:
25
26 Lambda lifting in quadratic time
27 Olivier Danvy, Ulrik Schultz
28
29 ML-Style Typing, Lambda Lifting and Partial Evaluation
30 Peter Thiemann
31 *)
32
33 (** prerequisite: identifiers are defined only once
34 [in other words, name analysis has been done]
35
36 no coercions
37
38 no "let type ... in ..."
39
40 @raise QmlTypes.Exception Check if this exception is really raised
41 @raise QmlTyperException.Exception Check if this exception is really raised
42 *)
43
44 val process_code:
45 early:bool ->
46 side:[`client | `server] ->
47 typed:bool ->
48 (* typed mode preserves types but it also needs types everywhere in the annotmap
49 * untyped mode works on a broken annotmap and breaks it even more *)
50 QmlTypes.gamma ->
51 QmlAst.annotmap ->
52 QmlAst.code ->
53 (QmlTypes.gamma * QmlAst.annotmap) * QmlAst.code
54
55 (* fun_action works in an untyped way, and 'lifts' only parts of the code in a very
56 * specific way not to introduce partial applications *)
57 val process_code_fun_action:
58 QmlAst.annotmap ->
59 QmlAst.code ->
60 QmlAst.annotmap * QmlAst.code * IdentSet.t (* client set *)
61 * IdentSet.t (* public set *)
Something went wrong with that request. Please try again.