Module Symb.SymbolPath

type deref_kind =
| Deref_ArrayIndex
| Deref_COneValuePointer
| Deref_CPointer
| Deref_JavaPointer
val compare_deref_kind : deref_kind -> deref_kind -> int
type partial = private
| Pvar of InferIR.Pvar.t
| Deref of deref_kind * partial
| Field of InferIR.Typ.Fieldname.t * partial
| Callsite of {
ret_typ : InferIR.Typ.t;
cs : InferIR.CallSite.t;
}
| StarField of {
last_field : InferIR.Typ.Fieldname.t;
prefix : partial;
}

Represents a path starting with prefix and ending with the field last_field, the middle can be anything. Invariants:

  • There is at most one StarField
  • StarField excluded, there are no duplicate fieldnames
  • StarField can only be followed by Deref elements
val compare_partial : partial -> partial -> int
type t = private
| Normal of partial
| Offset of {
p : partial;
is_void : bool;
}
| Length of {
p : partial;
is_void : bool;
}
| Modeled of partial
val equal_partial : partial -> partial -> bool
val pp_mark : markup:bool -> F.formatter -> t -> unit
val pp_partial : F.formatter -> partial -> unit
val pp_partial_paren : paren:bool -> F.formatter -> partial -> unit
val pp_pointer : paren:bool -> F.formatter -> partial -> unit
val of_pvar : InferIR.Pvar.t -> partial
val of_callsite : ret_typ:InferIR.Typ.t -> InferIR.CallSite.t -> partial
val deref : deref_kind:deref_kind -> partial -> partial
val field : partial -> InferIR.Typ.Fieldname.t -> partial
val star_field : partial -> InferIR.Typ.Fieldname.t -> partial
val normal : partial -> t
val offset : partial -> is_void:bool -> t
val length : partial -> is_void:bool -> t
val modeled : partial -> t
val is_this : partial -> bool
val get_pvar : partial -> InferIR.Pvar.t option
val represents_multiple_values : partial -> bool
val represents_multiple_values_sound : partial -> bool
val represents_callsite_sound_partial : partial -> bool
val exists_pvar_partial : f:(InferIR.Pvar.t -> bool) -> partial -> bool
val exists_str_partial : f:(string -> bool) -> partial -> bool
val is_void_ptr_path : t -> bool