sig

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