sig
  type localizable =
      PStmt of (Db_types.kernel_function * Cil_types.stmt)
    | PLval of
        (Db_types.kernel_function option * Cil_types.kinstr * Cil_types.lval)
    | PTermLval of
        (Db_types.kernel_function option * Cil_types.kinstr *
         Cil_types.term_lval)
    | PVDecl of (Db_types.kernel_function option * Cil_types.varinfo)
    | PCodeAnnot of
        (Db_types.kernel_function * Cil_types.stmt *
         Cil_types.code_annotation)
    | PGlobal of Cil_types.global
    | PBehavior of (Db_types.kernel_function * Cil_types.funbehavior)
    | PPredicate of
        (Db_types.kernel_function option * Cil_types.kinstr *
         Cil_types.identified_predicate)
  module Localizable_Datatype :
    sig
      type t = localizable
      val rehash : t -> t
      val descr : Unmarshal.t
      val copy : t -> t
      val name : string
      val register_comparable :
        ?compare:(t -> t -> int) ->
        ?equal:(t -> t -> bool) ->
        ?hash:(t -> int) -> ?physical_hash:(t -> int) -> unit -> unit
      val is_comparable_set : unit -> bool
      val hash : t -> int
      val physical_hash : t -> int
      val equal : t -> t -> bool
      val compare : t -> t -> int
      val contain_project : (Project.project -> t -> bool) option ref
    end
  module Locs : sig type state end
  val display_source :
    Cil_types.global list ->
    GSourceView.source_buffer ->
    host:Gtk_helper.host ->
    highlighter:(Pretty_source.localizable -> start:int -> stop:int -> unit) ->
    selector:(button:int -> Pretty_source.localizable -> unit) ->
    Pretty_source.Locs.state
  val hilite : Pretty_source.Locs.state -> unit
  val locate_localizable :
    Pretty_source.Locs.state ->
    Pretty_source.localizable -> (int * int) option
  val localizable_from_locs :
    Pretty_source.Locs.state ->
    file:string -> line:int -> Pretty_source.localizable list
end