|
|
|
(*
|
|
|
|
* Copyright (c) 2016 - present Facebook, Inc.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the BSD style license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
*)
|
|
|
|
|
|
|
|
open! IStd
|
|
|
|
|
|
|
|
module type Payload = sig
|
|
|
|
type payload
|
|
|
|
|
|
|
|
val update_payload : payload -> Specs.summary -> Specs.summary
|
|
|
|
|
|
|
|
val read_payload : Specs.summary -> payload option
|
|
|
|
end
|
|
|
|
|
|
|
|
module type S = sig
|
|
|
|
type payload
|
|
|
|
|
|
|
|
val update_summary : payload -> Specs.summary -> Specs.summary
|
|
|
|
|
|
|
|
val read_summary : Procdesc.t -> Typ.Procname.t -> payload option
|
|
|
|
end
|
|
|
|
|
|
|
|
module Make (P : Payload) : S with type payload = P.payload = struct
|
|
|
|
type payload = P.payload
|
|
|
|
|
|
|
|
let update_summary payload summary = P.update_payload payload summary
|
|
|
|
|
|
|
|
let read_summary caller_pdesc callee_pname =
|
|
|
|
match Ondemand.analyze_proc_name ~caller_pdesc callee_pname with
|
|
|
|
| None ->
|
|
|
|
None
|
|
|
|
| Some summary ->
|
|
|
|
P.read_payload summary
|
|
|
|
end
|