You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.5 KiB

(*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*)
open! IStd
module F = Format
module L = Logging
module ClassLoad = struct
include String
let describe = pp
end
module Event =
ExplicitTrace.MakeTraceElemModuloLocation (ClassLoad) (ExplicitTrace.DefaultCallPrinter)
include Event.FiniteSet
let add ({Event.trace} as x) astate =
match find_opt x astate with
| None ->
add x astate
| Some ({Event.trace= trace'} as x') ->
if Int.( <= ) (List.length trace') (List.length trace) then astate
else remove x' astate |> add x
let union xs ys = fold add xs ys
let add_string loc astate clazz =
L.debug Analysis Verbose "CL: LOADING class %s@." clazz ;
let new_event = Event.make clazz loc in
add new_event astate
let mem_typename name astate =
let str_name = Typ.Name.name name in
(* comparison of elements is only over the string component so fake the rest *)
let fake_event = Event.make str_name Location.dummy in
mem fake_event astate
let add_typename loc astate name = Typ.Name.name name |> add_string loc astate
let integrate_summary callee_pname loc astate callee_summary =
L.debug Analysis Verbose "CL: ADDING SUMMARY OF %a@." Procname.pp callee_pname ;
let callsite = CallSite.make callee_pname loc in
let summary = with_callsite callee_summary callsite in
union astate summary
type summary = t
let pp_summary = pp