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
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
|