-
Notifications
You must be signed in to change notification settings - Fork 125
/
imp_Env.ml
61 lines (48 loc) · 1.93 KB
/
imp_Env.ml
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
(*
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/>.
*)
module J = JsAst
type env = {
options : Qml2jsOptions.t;
gamma : QmlTypes.gamma;
annotmap : QmlAst.annotmap;
val_ : string -> Ident.t;
private_bymap : Imp_Bsl.JsImpBSL.ByPassMap.t;
renaming_client : QmlRenamingMap.t;
renaming_server : QmlRenamingMap.t;
}
type private_env = {
local_vars : J.ident list;
renaming : J.ident IdentMap.t;
no_warn_x : unit;
}
let next_param name = J.ExprIdent (Ident.next name)
let next_exprident private_env ident =
let ident = J.ExprIdent ident in
let private_env = {private_env with local_vars = ident :: private_env.local_vars} in
private_env, ident
(* Generate a fresh identifier and add it to the list of local variables *)
let next private_env name =
next_exprident private_env (Ident.next name)
let declare_local_vars private_env =
let local_vars = private_env.local_vars in
let private_env = {private_env with local_vars = []} in
let declarations = List.map (fun v -> JsCons.Statement.var v) local_vars in
private_env, JsCons.Statement.block declarations
let maybe_declare_local_vars private_env =
if private_env.local_vars = [] then
private_env, None
else
let private_env, statement = declare_local_vars private_env in
private_env, Some statement
let reset_renaming private_env = {private_env with renaming = IdentMap.empty}