Module for typestates: maps from expressions to annotated types, with extensions.

`type parameters``= (InferIR.Exp.t * InferIR.Typ.t) list```

Parameters of a call.

`type get_proc_desc``= InferIR.Typ.Procname.t ‑> InferIR.Procdesc.t option```
`type 'a ext````=` `{`

`empty : 'a;` | (** empty extension *)
`check_instr : InferIR.Tenv.t ‑> get_proc_desc ‑> InferIR.Typ.Procname.t ‑> InferIR.Procdesc.t ‑> 'a ‑> InferIR.Sil.instr ‑> parameters ‑> 'a;` | (** check the extension for an instruction *)
`join : 'a ‑> 'a ‑> 'a;` | (** join two extensions *)
`pp : Format.formatter ‑> 'a ‑> unit;` | (** pretty print an extension *)

`}```

Extension to a typestate with values of type 'a.

`type 'a t`````

Typestate extended with elements of type 'a.

`type range``= InferIR.Typ.t * TypeAnnotation.t * InferBase.Location.t list```
`val add_id : InferIR.Ident.t ‑> range ‑> 'a t ‑> 'a t`
`val add : InferIR.Pvar.t ‑> range ‑> 'a t ‑> 'a t`
`val empty : 'a ext ‑> 'a t`
`val equal : 'a t ‑> 'a t ‑> bool`
`val get_extension : 'a t ‑> 'a`
`val join : 'a ext ‑> 'a t ‑> 'a t ‑> 'a t`
`val lookup_id : InferIR.Ident.t ‑> 'a t ‑> range option`
`val lookup_pvar : InferIR.Pvar.t ‑> 'a t ‑> range option`
`val pp : 'a ext ‑> Format.formatter ‑> 'a t ‑> unit`
`val range_add_locs : range ‑> InferBase.Location.t list ‑> range`
`val remove_id : InferIR.Ident.t ‑> 'a t ‑> 'a t`
`val set_extension : 'a t ‑> 'a ‑> 'a t`
`val unit_ext : unit ext`