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.
95 lines
2.8 KiB
95 lines
2.8 KiB
6 years ago
|
(*
|
||
6 years ago
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||
6 years ago
|
*
|
||
|
* This source code is licensed under the MIT license found in the
|
||
|
* LICENSE file in the root directory of this source tree.
|
||
|
*)
|
||
|
|
||
|
open! IStd
|
||
6 years ago
|
module F = Format
|
||
5 years ago
|
open PulseBasicInterface
|
||
6 years ago
|
|
||
6 years ago
|
module Stack : sig
|
||
5 years ago
|
include
|
||
|
PrettyPrintable.MonoMap with type key = Var.t and type value = AbstractValue.t * ValueHistory.t
|
||
6 years ago
|
|
||
6 years ago
|
(* need to shadow the declaration in [MonoMap] even though it is unused since [MapS.compare] has a
|
||
6 years ago
|
different type *)
|
||
|
val compare : t -> t -> int [@@warning "-32"]
|
||
|
end
|
||
6 years ago
|
|
||
6 years ago
|
module Memory : sig
|
||
|
module Access :
|
||
5 years ago
|
PrettyPrintable.PrintableOrderedType with type t = AbstractValue.t HilExp.Access.t
|
||
6 years ago
|
|
||
6 years ago
|
module Edges : PrettyPrintable.PPMap with type key = Access.t
|
||
6 years ago
|
|
||
5 years ago
|
type edges = (AbstractValue.t * ValueHistory.t) Edges.t
|
||
6 years ago
|
|
||
6 years ago
|
val pp_edges : F.formatter -> edges -> unit [@@warning "-32"]
|
||
|
|
||
6 years ago
|
type cell = edges * Attributes.t
|
||
6 years ago
|
|
||
6 years ago
|
type t
|
||
6 years ago
|
|
||
5 years ago
|
val filter : (AbstractValue.t -> bool) -> t -> t
|
||
6 years ago
|
|
||
5 years ago
|
val filter_heap : (AbstractValue.t -> edges -> bool) -> t -> t
|
||
6 years ago
|
|
||
5 years ago
|
val find_opt : AbstractValue.t -> t -> cell option
|
||
6 years ago
|
|
||
5 years ago
|
val fold_attrs : (AbstractValue.t -> Attributes.t -> 'acc -> 'acc) -> t -> 'acc -> 'acc
|
||
6 years ago
|
|
||
5 years ago
|
val set_attrs : AbstractValue.t -> Attributes.t -> t -> t
|
||
6 years ago
|
|
||
5 years ago
|
val set_edges : AbstractValue.t -> edges -> t -> t
|
||
6 years ago
|
|
||
5 years ago
|
val set_cell : AbstractValue.t -> cell -> t -> t
|
||
6 years ago
|
|
||
5 years ago
|
val find_edges_opt : AbstractValue.t -> t -> edges option
|
||
6 years ago
|
|
||
5 years ago
|
val mem_edges : AbstractValue.t -> t -> bool
|
||
6 years ago
|
|
||
5 years ago
|
val register_address : AbstractValue.t -> t -> t
|
||
6 years ago
|
|
||
5 years ago
|
val add_edge : AbstractValue.t -> Access.t -> AbstractValue.t * ValueHistory.t -> t -> t
|
||
6 years ago
|
|
||
5 years ago
|
val find_edge_opt : AbstractValue.t -> Access.t -> t -> (AbstractValue.t * ValueHistory.t) option
|
||
6 years ago
|
|
||
5 years ago
|
val add_attribute : AbstractValue.t -> Attribute.t -> t -> t
|
||
6 years ago
|
|
||
5 years ago
|
val invalidate : AbstractValue.t * ValueHistory.t -> Invalidation.t -> Location.t -> t -> t
|
||
6 years ago
|
|
||
5 years ago
|
val check_valid : AbstractValue.t -> t -> (unit, Invalidation.t Trace.t) result
|
||
6 years ago
|
|
||
5 years ago
|
val get_closure_proc_name : AbstractValue.t -> t -> Typ.Procname.t option
|
||
6 years ago
|
|
||
5 years ago
|
val get_constant : AbstractValue.t -> t -> Const.t option
|
||
5 years ago
|
|
||
5 years ago
|
val std_vector_reserve : AbstractValue.t -> t -> t
|
||
6 years ago
|
|
||
5 years ago
|
val is_std_vector_reserved : AbstractValue.t -> t -> bool
|
||
6 years ago
|
end
|
||
6 years ago
|
|
||
6 years ago
|
type t = {heap: Memory.t; stack: Stack.t}
|
||
6 years ago
|
|
||
6 years ago
|
val empty : t
|
||
6 years ago
|
|
||
6 years ago
|
include AbstractDomain.NoJoin with type t := t
|
||
6 years ago
|
|
||
5 years ago
|
val reachable_addresses : t -> AbstractValue.Set.t
|
||
6 years ago
|
(** compute the set of abstract addresses that are "used" in the abstract state, i.e. reachable
|
||
6 years ago
|
from the stack variables *)
|
||
6 years ago
|
|
||
|
type mapping
|
||
|
|
||
|
val empty_mapping : mapping
|
||
|
|
||
|
type isograph_relation =
|
||
|
| NotIsomorphic (** no mapping was found that can make LHS the same as the RHS *)
|
||
|
| IsomorphicUpTo of mapping (** [mapping(lhs)] is isomorphic to [rhs] *)
|
||
|
|
||
|
val isograph_map : lhs:t -> rhs:t -> mapping -> isograph_relation
|
||
|
|
||
|
val is_isograph : lhs:t -> rhs:t -> mapping -> bool
|