sig
  type method_handle_kind =
      [ `GetField
      | `GetStatic
      | `InvokeInterface
      | `InvokeSpecial
      | `InvokeStatic
      | `InvokeVirtual
      | `NewInvokeSpecial
      | `PutField
      | `PutStatic ]
  type ldc_value =
      [ `Class of JBasics.object_type
      | `Float of float
      | `Int of int32
      | `MethodHandle of JBasics.method_handle
      | `MethodType of JBasics.method_descriptor
      | `String of JBasics.jstr ]
  type ioc_method =
      [ `Class of JBasics.object_type * JBasics.method_signature
      | `Interface of JBasics.class_name * JBasics.method_signature ]
  val bootstrap_argument_to_const :
    JBasics.bootstrap_argument -> JBasics.constant
  val method_handle_to_const :
    JBasics.method_handle -> JBasicsLow.method_handle_kind * JBasics.constant
  val constant_attribute_to_const :
    JClass.constant_attribute -> JBasics.constant
  val get_constant : JBasics.constant array -> int -> JBasics.constant
  val get_constant_ldc_value :
    JBasics.constant array -> int -> JBasicsLow.ldc_value
  val get_object_type : JBasics.constant array -> int -> JBasics.object_type
  val get_class : JBasics.constant array -> int -> JBasics.class_name
  val get_string : JBasics.constant array -> int -> string
  val get_field :
    JBasics.constant array ->
    int -> JBasics.class_name * JBasics.field_signature
  val get_method :
    JBasics.constant array ->
    int -> JBasics.object_type * JBasics.method_signature
  val get_interface_method :
    JBasics.constant array ->
    int -> JBasics.class_name * JBasics.method_signature
  val get_method_or_interface_method :
    JBasics.constant array -> int -> JBasicsLow.ioc_method
  val get_method_handle :
    JBasics.constant array -> int -> JBasics.method_handle
  val get_bootstrap_argument :
    JBasics.constant array -> int -> JBasics.bootstrap_argument
  val get_constant_attribute :
    JBasics.constant array -> int -> JClass.constant_attribute
  val get_class_ui16 :
    JBasics.constant array -> JLib.IO.input -> JBasics.class_name
  val get_string_ui16 : JBasics.constant array -> JLib.IO.input -> string
  val get_method_handle_ui16 :
    JBasics.constant array -> JLib.IO.input -> JBasics.method_handle
  val get_bootstrap_argument_ui16 :
    JBasics.constant array -> JLib.IO.input -> JBasics.bootstrap_argument
  val constant_to_int :
    JBasics.constant JLib.DynArray.t -> JBasics.constant -> int
  val ldc_value_to_int :
    JBasics.constant JLib.DynArray.t -> JBasicsLow.ldc_value -> int
  val object_type_to_int :
    JBasics.constant JLib.DynArray.t -> JBasics.object_type -> int
  val class_to_int :
    JBasics.constant JLib.DynArray.t -> JBasics.class_name -> int
  val field_to_int :
    JBasics.constant JLib.DynArray.t ->
    JBasics.class_name * JBasics.field_signature -> int
  val method_to_int :
    JBasics.constant JLib.DynArray.t ->
    JBasics.object_type * JBasics.method_signature -> int
  val interface_method_to_int :
    JBasics.constant JLib.DynArray.t ->
    JBasics.class_name * JBasics.method_signature -> int
  val string_to_int : JBasics.constant JLib.DynArray.t -> string -> int
  val method_handle_kind_to_int : JBasicsLow.method_handle_kind -> int
  val name_and_type_to_int :
    JBasics.constant JLib.DynArray.t -> string * JBasics.descriptor -> int
  val bootstrap_method_to_int :
    JBasics.bootstrap_method JLib.DynArray.t ->
    JBasics.bootstrap_method -> int
  val write_constant :
    'JLib.IO.output ->
    JBasics.constant JLib.DynArray.t -> JBasics.constant -> unit
  val write_object_type :
    'JLib.IO.output ->
    JBasics.constant JLib.DynArray.t -> JBasics.object_type -> unit
  val write_class :
    'JLib.IO.output ->
    JBasics.constant JLib.DynArray.t -> JBasics.class_name -> unit
  val write_string :
    'JLib.IO.output -> JBasics.constant JLib.DynArray.t -> string -> unit
  val write_name_and_type :
    'JLib.IO.output ->
    JBasics.constant JLib.DynArray.t -> string * JBasics.descriptor -> unit
  val write_bootstrap_argument :
    'JLib.IO.output ->
    JBasics.constant JLib.DynArray.t -> JBasics.bootstrap_argument -> unit
  val write_constant_attribute :
    'JLib.IO.output ->
    JBasics.constant JLib.DynArray.t -> JClass.constant_attribute -> unit
  val write_ui8 : 'JLib.IO.output -> int -> unit
  val write_i8 : 'JLib.IO.output -> int -> unit
  val write_string_with_length :
    ('JLib.IO.output -> int -> unit) -> 'JLib.IO.output -> string -> unit
  val write_with_length :
    ('JLib.IO.output -> int -> unit) ->
    'JLib.IO.output -> (string JLib.IO.output -> unit) -> unit
  val write_with_size :
    ('JLib.IO.output -> int -> unit) ->
    'JLib.IO.output -> ('-> unit) -> 'c list -> unit
end