sig
  type loc = Camlp4.PreCast.Loc.t
  type unop =
      Jdelete
    | Jvoid
    | Jtypeof
    | Jadd2_pre
    | Jsub2_pre
    | Jadd_pre
    | Jsub_pre
    | Jtilde
    | Jnot
    | Jadd2_post
    | Jsub2_post
  and binop =
      Jhashref
    | Jmul
    | Jdiv
    | Jmod
    | Jadd
    | Jsub
    | Jlt
    | Jgt
    | Jleq
    | Jgeq
    | Jlsr
    | Jlsl
    | Jasr
    | Jeq
    | Jneq
    | Jinstanceof
    | Jseq
    | Jsneq
    | Jland
    | Jlor
    | Jand
    | Jxor
    | Jor
    | Jcomma
    | Jassign
    | Jmul_assign
    | Jdiv_assign
    | Jmod_assign
    | Jadd_assign
    | Jsub_assign
    | Jlsl_assign
    | Jlsr_assign
    | Jasr_assign
    | Jand_assign
    | Jxor_assign
    | Jor_assign
  and exp =
      Jthis of Jslib_ast.loc
    | Jvar of Jslib_ast.loc * string
    | Jarray of Jslib_ast.loc * Jslib_ast.exp
    | Jobject of Jslib_ast.loc * (Jslib_ast.exp * Jslib_ast.exp) list
    | Jstring of Jslib_ast.loc * string * bool
    | Jnum of Jslib_ast.loc * string
    | Jnull of Jslib_ast.loc
    | Jbool of Jslib_ast.loc * bool
    | Jregexp of Jslib_ast.loc * string * string
    | Jfun of Jslib_ast.loc * string option * string list * Jslib_ast.stmt
    | Jfieldref of Jslib_ast.loc * Jslib_ast.exp * string
    | Junop of Jslib_ast.loc * Jslib_ast.unop * Jslib_ast.exp
    | Jbinop of Jslib_ast.loc * Jslib_ast.binop * Jslib_ast.exp *
        Jslib_ast.exp
    | Jite of Jslib_ast.loc * Jslib_ast.exp * Jslib_ast.exp * Jslib_ast.exp
    | Jcall of Jslib_ast.loc * Jslib_ast.exp * Jslib_ast.exp
    | Jnew of Jslib_ast.loc * Jslib_ast.exp * Jslib_ast.exp option
    | Jexp_nil of Jslib_ast.loc
    | Jexp_cons of Jslib_ast.loc * Jslib_ast.exp * Jslib_ast.exp
    | Jexp_Ant of Jslib_ast.loc * string
  and stmt =
      Jvars of Jslib_ast.loc * (string * Jslib_ast.exp option) list
    | Jfuns of Jslib_ast.loc * string * string list * Jslib_ast.stmt
    | Jreturn of Jslib_ast.loc * Jslib_ast.exp option
    | Jcontinue of Jslib_ast.loc * string option
    | Jbreak of Jslib_ast.loc * string option
    | Jswitch of Jslib_ast.loc * Jslib_ast.exp *
        (Jslib_ast.exp * Jslib_ast.stmt) list * Jslib_ast.stmt
    | Jites of Jslib_ast.loc * Jslib_ast.exp * Jslib_ast.stmt *
        Jslib_ast.stmt option
    | Jthrow of Jslib_ast.loc * Jslib_ast.exp
    | Jexps of Jslib_ast.loc * Jslib_ast.exp
    | Jtrycatch of Jslib_ast.loc * Jslib_ast.stmt *
        (string * Jslib_ast.stmt) option * Jslib_ast.stmt
    | Jfor of Jslib_ast.loc * (string * Jslib_ast.exp option) list *
        Jslib_ast.exp option * Jslib_ast.exp option * Jslib_ast.exp option *
        Jslib_ast.stmt
    | Jdowhile of Jslib_ast.loc * Jslib_ast.stmt * Jslib_ast.exp
    | Jwhile of Jslib_ast.loc * Jslib_ast.exp * Jslib_ast.stmt
    | Jblock of Jslib_ast.loc * Jslib_ast.stmt
    | Jwith of Jslib_ast.loc * Jslib_ast.exp * Jslib_ast.stmt
    | Jlabel of Jslib_ast.loc * string * Jslib_ast.stmt
    | Jstmt_nil of Jslib_ast.loc
    | Jstmt_cons of Jslib_ast.loc * Jslib_ast.stmt * Jslib_ast.stmt
    | Jstmt_Ant of Jslib_ast.loc * string
  val loc_of_exp : Jslib_ast.exp -> Camlp4.PreCast.Loc.t
  val exp_of_list : Jslib_ast.exp list -> Jslib_ast.exp
  val list_of_exp : Jslib_ast.exp -> Jslib_ast.exp list -> Jslib_ast.exp list
  val loc_of_stmt : Jslib_ast.stmt -> Camlp4.PreCast.Loc.t
  val stmt_of_list : Jslib_ast.stmt list -> Jslib_ast.stmt
  val list_of_stmt :
    Jslib_ast.stmt -> Jslib_ast.stmt list -> Jslib_ast.stmt list
  module Meta :
    sig
      module type META_LOC =
        sig
          val meta_loc_patt :
            Camlp4.PreCast.Loc.t ->
            Camlp4.PreCast.Loc.t -> Camlp4.PreCast.Ast.patt
          val meta_loc_expr :
            Camlp4.PreCast.Loc.t ->
            Camlp4.PreCast.Loc.t -> Camlp4.PreCast.Ast.expr
        end
      module MetaLoc :
        sig
          val meta_loc_patt :
            Camlp4.PreCast.Ast.loc ->
            Camlp4.PreCast.Loc.t -> Camlp4.PreCast.Ast.patt
          val meta_loc_expr :
            Camlp4.PreCast.Ast.loc ->
            Camlp4.PreCast.Loc.t -> Camlp4.PreCast.Ast.expr
        end
      module MetaGhostLoc :
        sig
          val meta_loc_patt :
            Camlp4.PreCast.Ast.loc -> '-> Camlp4.PreCast.Ast.patt
          val meta_loc_expr :
            Camlp4.PreCast.Ast.loc -> '-> Camlp4.PreCast.Ast.expr
        end
      module MetaLocVar :
        sig
          val meta_loc_patt :
            Camlp4.PreCast.Ast.loc -> '-> Camlp4.PreCast.Ast.patt
          val meta_loc_expr :
            Camlp4.PreCast.Ast.loc -> '-> Camlp4.PreCast.Ast.expr
        end
      module Make :
        functor (MetaLoc : META_LOC->
          sig
            module Expr :
              sig
                val meta_loc :
                  Camlp4.PreCast.Loc.t ->
                  Camlp4.PreCast.Loc.t -> Camlp4.PreCast.Ast.expr
                val meta_option :
                  (Camlp4.PreCast.Ast.loc -> '-> Camlp4.PreCast.Ast.expr) ->
                  Camlp4.PreCast.Ast.loc ->
                  'a option -> Camlp4.PreCast.Ast.expr
                val meta_string :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.expr
                val meta_int :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.expr
                val meta_float :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.expr
                val meta_char :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.expr
                val meta_bool :
                  Camlp4.PreCast.Ast.loc -> bool -> Camlp4.PreCast.Ast.expr
                val meta_list :
                  (Camlp4.PreCast.Ast.loc -> '-> Camlp4.PreCast.Ast.expr) ->
                  Camlp4.PreCast.Ast.loc ->
                  'a list -> Camlp4.PreCast.Ast.expr
                val meta_binop :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.binop -> Camlp4.PreCast.Ast.expr
                val meta_exp :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.exp -> Camlp4.PreCast.Ast.expr
                val meta_stmt :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.stmt -> Camlp4.PreCast.Ast.expr
                val meta_unop :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.unop -> Camlp4.PreCast.Ast.expr
              end
            module Patt :
              sig
                val meta_loc :
                  Camlp4.PreCast.Loc.t ->
                  Camlp4.PreCast.Loc.t -> Camlp4.PreCast.Ast.patt
                val meta_option :
                  (Camlp4.PreCast.Ast.loc -> '-> Camlp4.PreCast.Ast.patt) ->
                  Camlp4.PreCast.Ast.loc ->
                  'a option -> Camlp4.PreCast.Ast.patt
                val meta_string :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.patt
                val meta_int :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.patt
                val meta_float :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.patt
                val meta_char :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.patt
                val meta_bool :
                  Camlp4.PreCast.Ast.loc -> bool -> Camlp4.PreCast.Ast.patt
                val meta_list :
                  (Camlp4.PreCast.Ast.loc -> '-> Camlp4.PreCast.Ast.patt) ->
                  Camlp4.PreCast.Ast.loc ->
                  'a list -> Camlp4.PreCast.Ast.patt
                val meta_binop :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.binop -> Camlp4.PreCast.Ast.patt
                val meta_exp :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.exp -> Camlp4.PreCast.Ast.patt
                val meta_stmt :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.stmt -> Camlp4.PreCast.Ast.patt
                val meta_unop :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.unop -> Camlp4.PreCast.Ast.patt
              end
          end
      module MakeLambda :
        functor (MetaLoc : META_LOC->
          sig
            module Expr :
              sig
                val meta_loc :
                  Camlp4.PreCast.Loc.t ->
                  Camlp4.PreCast.Loc.t -> Camlp4.PreCast.Ast.expr
                val meta_option :
                  (Camlp4.PreCast.Ast.loc -> '-> Camlp4.PreCast.Ast.expr) ->
                  Camlp4.PreCast.Ast.loc ->
                  'a option -> Camlp4.PreCast.Ast.expr
                val meta_string :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.expr
                val meta_int :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.expr
                val meta_float :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.expr
                val meta_char :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.expr
                val meta_bool :
                  Camlp4.PreCast.Ast.loc -> bool -> Camlp4.PreCast.Ast.expr
                val meta_list :
                  (Camlp4.PreCast.Ast.loc -> '-> Camlp4.PreCast.Ast.expr) ->
                  Camlp4.PreCast.Ast.loc ->
                  'a list -> Camlp4.PreCast.Ast.expr
                val meta_binop :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.binop -> Camlp4.PreCast.Ast.expr
                val meta_exp :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.exp -> Camlp4.PreCast.Ast.expr
                val meta_stmt :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.stmt -> Camlp4.PreCast.Ast.expr
                val meta_unop :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.unop -> Camlp4.PreCast.Ast.expr
              end
            module Patt :
              sig
                val meta_loc :
                  Camlp4.PreCast.Loc.t ->
                  Camlp4.PreCast.Loc.t -> Camlp4.PreCast.Ast.patt
                val meta_option :
                  (Camlp4.PreCast.Ast.loc -> '-> Camlp4.PreCast.Ast.patt) ->
                  Camlp4.PreCast.Ast.loc ->
                  'a option -> Camlp4.PreCast.Ast.patt
                val meta_string :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.patt
                val meta_int :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.patt
                val meta_float :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.patt
                val meta_char :
                  Camlp4.PreCast.Ast.loc -> string -> Camlp4.PreCast.Ast.patt
                val meta_bool :
                  Camlp4.PreCast.Ast.loc -> bool -> Camlp4.PreCast.Ast.patt
                val meta_list :
                  (Camlp4.PreCast.Ast.loc -> '-> Camlp4.PreCast.Ast.patt) ->
                  Camlp4.PreCast.Ast.loc ->
                  'a list -> Camlp4.PreCast.Ast.patt
                val meta_binop :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.binop -> Camlp4.PreCast.Ast.patt
                val meta_exp :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.exp -> Camlp4.PreCast.Ast.patt
                val meta_stmt :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.stmt -> Camlp4.PreCast.Ast.patt
                val meta_unop :
                  Camlp4.PreCast.Ast.loc ->
                  Jslib_ast.unop -> Camlp4.PreCast.Ast.patt
              end
          end
      module MakeAbstractLambda :
        functor (MetaLoc : META_LOC->
          sig
            module Expr :
              sig
                val meta_loc :
                  Camlp4.PreCast.Loc.t ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr
                val meta_option :
                  (Camlp4.PreCast.Ast.loc ->
                   Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr) ->
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr
                val meta_string :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr
                val meta_int :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr
                val meta_float :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr
                val meta_char :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr
                val meta_bool :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr
                val meta_list :
                  (Camlp4.PreCast.Ast.loc ->
                   Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr) ->
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr
                val meta_binop :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr
                val meta_exp :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr
                val meta_stmt :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr
                val meta_unop :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.expr
              end
            module Patt :
              sig
                val meta_loc :
                  Camlp4.PreCast.Loc.t ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt
                val meta_option :
                  (Camlp4.PreCast.Ast.loc ->
                   Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt) ->
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt
                val meta_string :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt
                val meta_int :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt
                val meta_float :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt
                val meta_char :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt
                val meta_bool :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt
                val meta_list :
                  (Camlp4.PreCast.Ast.loc ->
                   Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt) ->
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt
                val meta_binop :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt
                val meta_exp :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt
                val meta_stmt :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt
                val meta_unop :
                  Camlp4.PreCast.Ast.loc ->
                  Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.patt
              end
          end
    end
end