The Smallfoot Intermediate Language: Decompiled Expressions

`module F = Format`
`type t````=`

`|` `Darray of t * t`
`|` `Dbinop of InferIR.Binop.t * t * t`
`|` `Dconst of InferIR.Const.t`
`|` `Dsizeof of InferIR.Typ.t * t option * InferIR.Subtype.t`
`|` `Dderef of t`
`|` `Dfcall of t * t list * InferBase.Location.t * InferIR.CallFlags.t`
`|` `Darrow of t * InferIR.Typ.Fieldname.t`
`|` `Ddot of t * InferIR.Typ.Fieldname.t`
`|` `Dpvar of InferIR.Pvar.t`
`|` `Dpvaraddr of InferIR.Pvar.t`
`|` `Dunop of InferIR.Unop.t * t`
`|` `Dunknown`
`|` `Dretcall of t * t list * InferBase.Location.t * InferIR.CallFlags.t`

``

expression representing the result of decompilation

`type vpath``= t option```

Value paths: identify an occurrence of a value in a symbolic heap each expression represents a path, with Dpvar being the simplest one

`val to_string : t ‑> string`

convert to a string

`val pp_vpath : InferStdlib.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