HilExp.AccessExpressionval of_id : IR.Ident.t -> IR.Typ.t -> access_expressionval base : AccessPath.base -> access_expressionval field_offset : access_expression -> IR.Fieldname.t -> access_expressionval array_offset :
access_expression ->
IR.Typ.t ->
t option ->
access_expressionval address_of : access_expression -> access_expression optionaddress_of doesn't always make sense, eg address_of (Dereference t) is None
val address_of_base : AccessPath.base -> access_expressionval to_access_path : access_expression -> AccessPath.tval get_base : access_expression -> AccessPath.baseval replace_base :
remove_deref_after_base:bool ->
AccessPath.base ->
access_expression ->
access_expressionval is_return_var : access_expression -> boolval get_typ : access_expression -> IR.Tenv.t -> IR.Typ.t optionval pp : Stdlib.Format.formatter -> access_expression -> unitval equal : access_expression -> access_expression -> boolval to_accesses :
access_expression ->
access_expression * t option MemoryAccess.t listreturn the base and a list of accesses equivalent to the input expression
val add_access :
access_expression ->
t option MemoryAccess.t ->
access_expression optionval truncate :
access_expression ->
(access_expression * t option MemoryAccess.t) optionremove and return the prefix and the last access of the expression if it's a base; otherwise return None
val append :
onto:access_expression ->
access_expression ->
access_expression optionappend ~onto y replaces the base of y with onto itself; this makes sense if no Dereference (AddressOf _) instances are introduced
type nonrec t = private access_expression = | Base of AccessPath.base| FieldOffset of access_expression * IR.Fieldname.t| ArrayOffset of access_expression * IR.Typ.t * t option| AddressOf of access_expression| Dereference of access_expressioninclude Ppx_compare_lib.Comparable.S with type t := tval compare : t Base__Ppx_compare_lib.compare