Skip to content
This repository
tag: v1067
Fetching contributors…

Cannot retrieve contributors at this time

file 61 lines (48 sloc) 1.972 kb
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}
Something went wrong with that request. Please try again.