(* * Copyright (c) 2009-2013, Monoidics ltd. * 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. *) (** The Smallfoot Intermediate Language: Decompiled Expressions *) open! IStd module F = Format (** expression representing the result of decompilation *) type t = | Darray of t * t | Dbinop of Binop.t * t * t | Dconst of Const.t | Dsizeof of Typ.t * t option * Subtype.t | Dderef of t | Dfcall of t * t list * Location.t * CallFlags.t | Darrow of t * Fieldname.t | Ddot of t * Fieldname.t | Dpvar of Pvar.t | Dpvaraddr of Pvar.t | Dunop of Unop.t * t | Dunknown | Dretcall of t * t list * Location.t * CallFlags.t (** Value paths: identify an occurrence of a value in a symbolic heap each expression represents a path, with Dpvar being the simplest one *) type vpath = t option val pp : F.formatter -> t -> unit val to_string : t -> string (** convert to a string *) val pp_vpath : Pp.env -> F.formatter -> vpath -> unit (** Pretty print a value path *) val has_tmp_var : t -> bool (** return true if [dexp] contains a temporary pvar *)