Textual.Exp
type t =
| Var of Ident.t
pure variable: it is not an lvalue
*)| Load of {
}
| Lvar of VarName.t
the address of a program variable
*)| Field of {
exp : t;
field : qualified_fieldname;
}
field offset
*)| Index of t * t
an array index offset: exp1[exp2]
| Const of Const.t
| Call of {
proc : QualifiedProcName.t;
args : t list;
kind : call_kind;
}
| Closure of {
proc : QualifiedProcName.t;
captured : t list;
params : VarName.t list;
}
| Apply of {
}
| Typ of Typ.t
val call_non_virtual : QualifiedProcName.t -> t list -> t
val call_virtual : QualifiedProcName.t -> t -> t list -> t
val call_sig : QualifiedProcName.t -> int -> Lang.t option -> ProcSig.t
val allocate_object : TypeName.t -> t
val vars : t -> Ident.Set.t
val pp : F.formatter -> t -> unit