functor
  (M : sig
         val name : string
         val default : Cil_types.kernel_function -> bool
       end->
  functor
    (Proxy : sig
               val self : State.t
               val get_state : Cil_types.kernel_function -> State.t
             end->
    sig
      val self : State.t
      val name : string
      val kind : State.kind
      val mark_as_computed : ?project:Project.t -> unit -> unit
      val is_computed : ?project:Project.t -> unit -> bool
      module Datatype : Datatype.S
      val add_hook_on_update : (Datatype.t -> unit) -> unit
      val howto_marshal : (Datatype.t -> 'a) -> ('-> Datatype.t) -> unit
      type key = Dashtbl.Default_key_marshaler(Kernel_function).t
      type data =
          Dashtbl.Default_data_marshaler(Datatype.Ref(Datatype.Bool)).t
      val add : string -> key -> State.t list -> data -> unit
      val replace :
        reset:bool -> string -> key -> State.t list -> data -> unit
      val memo :
        reset:bool ->
        (data list -> data) -> string -> key -> State.t list -> data
      val clear : reset:bool -> unit -> unit
      val remove : reset:bool -> key -> State.t -> unit
      val remove_all : reset:bool -> key -> unit
      val filter :
        reset:bool -> (key -> State.t option -> data -> bool) -> key -> unit
      val mem : key -> bool
      val is_local : State.t -> bool
      val find : ?who:State.t list -> key -> State.t -> data * State.t
      val find_key : State.t -> (key * State.t) list
      val find_data : ?who:State.t list -> key -> State.t -> data
      val find_state : ?who:State.t list -> key -> State.t -> State.t
      val find_all_local :
        ?who:State.t list -> key -> State.t -> (data * State.t) list
      val find_all_local_data :
        ?who:State.t list -> key -> State.t -> data list
      val find_all_local_states :
        ?who:State.t list -> key -> State.t -> State.t list
      val find_all : ?who:State.t list -> key -> (data * State.t) list
      val find_all_data : ?who:State.t list -> key -> data list
      val find_all_states : ?who:State.t list -> key -> State.t list
      val iter : (key -> State.t option -> data * State.t -> unit) -> unit
      val iter_key :
        (State.t option -> data * State.t -> unit) -> key -> unit
      val fold :
        (key -> State.t option -> data * State.t -> '-> 'a) -> '-> 'a
      val fold_key :
        (State.t option -> data * State.t -> '-> 'a) -> key -> '-> 'a
      val length : unit -> int
      module Graph : Dashtbl.Graph
      val add : Kernel_function.t -> State.t list -> data -> unit
      val get : key -> Datatype.Bool.t
      val get_state : key -> State.t
      val set : key -> Datatype.Bool.t -> unit
    end