Module InferIR.HilExp

module F = Format
type t =
| AccessExpression of AccessExpression.t

(** access path (e.g., x.f.g or xi) *)

| UnaryOperator of Unop.t * t * Typ.t option

(** Unary operator with type of the result if known *)

| BinaryOperator of Binop.t * t * t

(** Binary operator *)

| Exception of t

(** Exception *)

| Closure of Typ.Procname.t * (AccessPath.base * t) list

(** Name of function + environment *)

| Constant of Const.t

(** Constants *)

| Cast of Typ.t * t

(** Type cast *)

| Sizeof of Typ.t * t option

(** C-style sizeof(), and also used to treate a type as an expression. Refer to Exp module for canonical documentation *)

include sig ... end
val compare : t ‑> t ‑> int
val pp : F.formatter ‑> t ‑> unit
val get_typ : Tenv.t ‑> t ‑> Typ.t option

Get the type of the expression. Warning: not fully implemented

val of_sil : include_array_indexes:bool ‑> f_resolve_id:(Var.t ‑> AccessExpression.t option) ‑> add_deref:bool ‑> Exp.t ‑> Typ.t ‑> t

Convert SIL expression to HIL expression

val get_access_exprs : t ‑> AccessExpression.t list

Get all the access paths used in the given HIL expression, including duplicates if a path is used more than once.

val is_null_literal : t ‑> bool
val is_int_zero : t ‑> bool
val eval : t ‑> Const.t option