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 -> Extlib.ExtOo.Oo.Internal.tag
  val new_method :
    Extlib.ExtOo.Oo.Internal.table -> Extlib.ExtOo.Oo.Internal.label
  val new_variable : Extlib.ExtOo.Oo.Internal.table -> string -> int
  val new_methods_variables :
    Extlib.ExtOo.Oo.Internal.table ->
    string array -> string array -> Extlib.ExtOo.Oo.Internal.label array
  val get_variable : Extlib.ExtOo.Oo.Internal.table -> string -> int
  val get_variables :
    Extlib.ExtOo.Oo.Internal.table -> string array -> int array
  val get_method_label :
    Extlib.ExtOo.Oo.Internal.table ->
    string -> Extlib.ExtOo.Oo.Internal.label
  val get_method_labels :
    Extlib.ExtOo.Oo.Internal.table ->
    string array -> Extlib.ExtOo.Oo.Internal.label array
  val get_method :
    Extlib.ExtOo.Oo.Internal.table ->
    Extlib.ExtOo.Oo.Internal.label -> Extlib.ExtOo.Oo.Internal.meth
  val set_method :
    Extlib.ExtOo.Oo.Internal.table ->
    Extlib.ExtOo.Oo.Internal.label -> Extlib.ExtOo.Oo.Internal.meth -> unit
  val set_methods :
    Extlib.ExtOo.Oo.Internal.table ->
    Extlib.ExtOo.Oo.Internal.label array -> unit
  val narrow :
    Extlib.ExtOo.Oo.Internal.table ->
    string array -> string array -> string array -> unit
  val widen : Extlib.ExtOo.Oo.Internal.table -> unit
  val add_initializer :
    Extlib.ExtOo.Oo.Internal.table ->
    (Extlib.ExtOo.Oo.Internal.obj -> unit) -> unit
  val dummy_table : Extlib.ExtOo.Oo.Internal.table
  val create_table : string array -> Extlib.ExtOo.Oo.Internal.table
  val init_class : Extlib.ExtOo.Oo.Internal.table -> unit
  val inherits :
    Extlib.ExtOo.Oo.Internal.table ->
    string array ->
    string array ->
    string array ->
    Extlib.ExtOo.Oo.Internal.t *
    (Extlib.ExtOo.Oo.Internal.table -> Extlib.ExtOo.Oo.Internal.obj -> Obj.t) *
    Extlib.ExtOo.Oo.Internal.t * Extlib.ExtOo.Oo.Internal.obj ->
    bool -> Obj.t array
  val make_class :
    string array ->
    (Extlib.ExtOo.Oo.Internal.table -> Obj.t -> Extlib.ExtOo.Oo.Internal.t) ->
    Extlib.ExtOo.Oo.Internal.t *
    (Extlib.ExtOo.Oo.Internal.table -> Obj.t -> Extlib.ExtOo.Oo.Internal.t) *
    (Obj.t -> Extlib.ExtOo.Oo.Internal.t) * Obj.t
  type init_table = CamlinternalOO.init_table
  val make_class_store :
    string array ->
    (Extlib.ExtOo.Oo.Internal.table -> Extlib.ExtOo.Oo.Internal.t) ->
    Extlib.ExtOo.Oo.Internal.init_table -> unit
  val dummy_class :
    string * int * int ->
    Extlib.ExtOo.Oo.Internal.t *
    (Extlib.ExtOo.Oo.Internal.table -> Obj.t -> Extlib.ExtOo.Oo.Internal.t) *
    (Obj.t -> Extlib.ExtOo.Oo.Internal.t) * Obj.t
  val copy : (< .. > as 'a) -> 'a
  val create_object :
    Extlib.ExtOo.Oo.Internal.table -> Extlib.ExtOo.Oo.Internal.obj
  val create_object_opt :
    Extlib.ExtOo.Oo.Internal.obj ->
    Extlib.ExtOo.Oo.Internal.table -> Extlib.ExtOo.Oo.Internal.obj
  val run_initializers :
    Extlib.ExtOo.Oo.Internal.obj -> Extlib.ExtOo.Oo.Internal.table -> unit
  val run_initializers_opt :
    Extlib.ExtOo.Oo.Internal.obj ->
    Extlib.ExtOo.Oo.Internal.obj ->
    Extlib.ExtOo.Oo.Internal.table -> Extlib.ExtOo.Oo.Internal.obj
  val create_object_and_run_initializers :
    Extlib.ExtOo.Oo.Internal.obj ->
    Extlib.ExtOo.Oo.Internal.table -> Extlib.ExtOo.Oo.Internal.obj
  external send :
    Extlib.ExtOo.Oo.Internal.obj ->
    Extlib.ExtOo.Oo.Internal.tag -> Extlib.ExtOo.Oo.Internal.t = "%send"
  external sendcache :
    Extlib.ExtOo.Oo.Internal.obj ->
    Extlib.ExtOo.Oo.Internal.tag ->
    Extlib.ExtOo.Oo.Internal.t -> int -> Extlib.ExtOo.Oo.Internal.t
    = "%sendcache"
  external sendself :
    Extlib.ExtOo.Oo.Internal.obj ->
    Extlib.ExtOo.Oo.Internal.label -> Extlib.ExtOo.Oo.Internal.t
    = "%sendself"
  external get_public_method :
    Extlib.ExtOo.Oo.Internal.obj ->
    Extlib.ExtOo.Oo.Internal.tag -> Extlib.ExtOo.Oo.Internal.closure
    = "caml_get_public_method" "noalloc"
  type tables = CamlinternalOO.tables
  val lookup_tables :
    Extlib.ExtOo.Oo.Internal.tables ->
    Extlib.ExtOo.Oo.Internal.closure array -> Extlib.ExtOo.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 Extlib.ExtOo.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 : Extlib.ExtOo.Oo.Internal.params
  type stats =
    CamlinternalOO.stats = {
    classes : int;
    methods : int;
    inst_vars : int;
  }
  val stats : unit -> Extlib.ExtOo.Oo.Internal.stats
end