sig
  val copy : (< .. > as 'a) -> 'a
  type label
  val new_method : string -> Oo.label
  type table
  and meth
  and t
  and obj
  val new_variable : Oo.table -> string -> int
  val get_variable : Oo.table -> string -> int
  val get_method_label : Oo.table -> string -> Oo.label
  val get_method : Oo.table -> Oo.label -> Oo.meth
  val set_method : Oo.table -> Oo.label -> Oo.meth -> unit
  val narrow : Oo.table -> string list -> string list -> string list -> unit
  val widen : Oo.table -> unit
  val add_initializer : Oo.table -> (Oo.obj -> unit) -> unit
  val create_table : string list -> Oo.table
  val init_class : Oo.table -> unit
  val create_object : Oo.table -> Oo.obj
  val run_initializers : Oo.obj -> Oo.table -> unit
  val send : Oo.obj -> Oo.label -> Oo.t
  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 : Oo.params
  type stats = {
    classes : int;
    labels : int;
    methods : int;
    inst_vars : int;
    buckets : int;
    distrib : int array;
    small_bucket_count : int;
    small_bucket_max : int;
  } 
  val stats : unit -> Oo.stats
  val show_buckets : unit -> unit
end