Module InferIR__HilExp

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

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

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

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

| BinaryOperator of InferIR.Binop.t * t * t

(** Binary operator *)

| Exception of t

(** Exception *)

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

(** Name of function + environment *)

| Constant of InferIR.Const.t

(** Constants *)

| Cast of InferIR.Typ.t * t

(** Type cast *)

| Sizeof of InferIR.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 : InferIR.Tenv.t ‑> t ‑> InferIR.Typ.t option

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

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

Convert SIL expression to HIL expression

val get_access_exprs : t ‑> InferIR.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 ‑> InferIR.Const.t option