sig
  type tag = CamlinternalOO.tag
  type label = CamlinternalOO.label
  type table = CamlinternalOO.table
  type meth = CamlinternalOO.meth
  type t = CamlinternalOO.t
  type obj = CamlinternalOO.obj
  type closure = CamlinternalOO.closure
  val public_method_label : string -> BatOo.Oo.Internal.tag
  val new_method : BatOo.Oo.Internal.table -> BatOo.Oo.Internal.label
  val new_variable : BatOo.Oo.Internal.table -> string -> int
  val new_methods_variables :
    BatOo.Oo.Internal.table ->
    string array -> string array -> BatOo.Oo.Internal.label array
  val get_variable : BatOo.Oo.Internal.table -> string -> int
  val get_variables : BatOo.Oo.Internal.table -> string array -> int array
  val get_method_label :
    BatOo.Oo.Internal.table -> string -> BatOo.Oo.Internal.label
  val get_method_labels :
    BatOo.Oo.Internal.table -> string array -> BatOo.Oo.Internal.label array
  val get_method :
    BatOo.Oo.Internal.table ->
    BatOo.Oo.Internal.label -> BatOo.Oo.Internal.meth
  val set_method :
    BatOo.Oo.Internal.table ->
    BatOo.Oo.Internal.label -> BatOo.Oo.Internal.meth -> unit
  val set_methods :
    BatOo.Oo.Internal.table -> BatOo.Oo.Internal.label array -> unit
  val narrow :
    BatOo.Oo.Internal.table ->
    string array -> string array -> string array -> unit
  val widen : BatOo.Oo.Internal.table -> unit
  val add_initializer :
    BatOo.Oo.Internal.table -> (BatOo.Oo.Internal.obj -> unit) -> unit
  val dummy_table : BatOo.Oo.Internal.table
  val create_table : string array -> BatOo.Oo.Internal.table
  val init_class : BatOo.Oo.Internal.table -> unit
  val inherits :
    BatOo.Oo.Internal.table ->
    string array ->
    string array ->
    string array ->
    BatOo.Oo.Internal.t *
    (BatOo.Oo.Internal.table -> BatOo.Oo.Internal.obj -> Obj.t) *
    BatOo.Oo.Internal.t * BatOo.Oo.Internal.obj -> bool -> Obj.t array
  val make_class :
    string array ->
    (BatOo.Oo.Internal.table -> Obj.t -> BatOo.Oo.Internal.t) ->
    BatOo.Oo.Internal.t *
    (BatOo.Oo.Internal.table -> Obj.t -> BatOo.Oo.Internal.t) *
    (Obj.t -> BatOo.Oo.Internal.t) * Obj.t
  type init_table = CamlinternalOO.init_table
  val make_class_store :
    string array ->
    (BatOo.Oo.Internal.table -> BatOo.Oo.Internal.t) ->
    BatOo.Oo.Internal.init_table -> unit
  val dummy_class :
    string * int * int ->
    BatOo.Oo.Internal.t *
    (BatOo.Oo.Internal.table -> Obj.t -> BatOo.Oo.Internal.t) *
    (Obj.t -> BatOo.Oo.Internal.t) * Obj.t
  val copy : (< .. > as 'a) -> 'a
  val create_object : BatOo.Oo.Internal.table -> BatOo.Oo.Internal.obj
  val create_object_opt :
    BatOo.Oo.Internal.obj -> BatOo.Oo.Internal.table -> BatOo.Oo.Internal.obj
  val run_initializers :
    BatOo.Oo.Internal.obj -> BatOo.Oo.Internal.table -> unit
  val run_initializers_opt :
    BatOo.Oo.Internal.obj ->
    BatOo.Oo.Internal.obj -> BatOo.Oo.Internal.table -> BatOo.Oo.Internal.obj
  val create_object_and_run_initializers :
    BatOo.Oo.Internal.obj -> BatOo.Oo.Internal.table -> BatOo.Oo.Internal.obj
  external send :
    BatOo.Oo.Internal.obj -> BatOo.Oo.Internal.tag -> BatOo.Oo.Internal.t
    = "%send"
  external sendcache :
    BatOo.Oo.Internal.obj ->
    BatOo.Oo.Internal.tag ->
    BatOo.Oo.Internal.t -> int -> BatOo.Oo.Internal.t = "%sendcache"
  external sendself :
    BatOo.Oo.Internal.obj -> BatOo.Oo.Internal.label -> BatOo.Oo.Internal.t
    = "%sendself"
  external get_public_method :
    BatOo.Oo.Internal.obj ->
    BatOo.Oo.Internal.tag -> BatOo.Oo.Internal.closure
    = "caml_get_public_method" "noalloc"
  type tables = CamlinternalOO.tables
  val lookup_tables :
    BatOo.Oo.Internal.tables ->
    BatOo.Oo.Internal.closure array -> BatOo.Oo.Internal.tables
  type impl =
    CamlinternalOO.impl =
      GetConst
    | GetVar
    | GetEnv
    | GetMeth
    | SetVar
    | AppConst
    | AppVar
    | AppEnv
    | AppMeth
    | AppConstConst
    | AppConstVar
    | AppConstEnv
    | AppConstMeth
    | AppVarConst
    | AppEnvConst
    | AppMethConst
    | MethAppConst
    | MethAppVar
    | MethAppEnv
    | MethAppMeth
    | SendConst
    | SendVar
    | SendEnv
    | SendMeth
    | Closure of BatOo.Oo.Internal.closure
  type params =
    CamlinternalOO.params = {
    mutable compact_table : bool;
    mutable copy_parent : bool;
    mutable clean_when_copying : bool;
    mutable retry_count : int;
    mutable bucket_small_size : int;
  }
  val params : BatOo.Oo.Internal.params
  type stats =
    CamlinternalOO.stats = {
    classes : int;
    methods : int;
    inst_vars : int;
  }
  val stats : unit -> BatOo.Oo.Internal.stats
end