let data_unop kr unop ka ga =
match unop with
| Neg ->
begin
match kr with
| (Kint | Kcint _) ->
data_of_integer (F.e_ineg (integer_of_data ka ga))
| Kreal -> data_of_real (F.e_rneg (real_of_data ka ga))
| _ -> WpLog.fatal
"wrong type of parameter for negation operator"
end
| LNot ->
let b =
match kr with
|(Kint | Kcint _)->
F.e_icmp Ceq (integer_of_data ka ga) (F.e_icst "0")
|Kreal -> F.e_rcmp Ceq (real_of_data ka ga) (F.e_rcst "0.0")
|Kptr ty ->
let obj = object_of ty in
M.is_null (loc_of_data obj ga)
| Kbool ->
F.e_not (boolean_of_data ga)
| k -> WpLog.fatal
"%a : wrong type of parameter for logic not operator" pp_kind k
in data_of_boolean b
| BNot ->
begin
match kr with
| (Kint | Kcint _) ->
data_of_integer (F.e_bnot (integer_of_data ka ga))
| _ -> WpLog.fatal
"wrong type of parameter for bitwise not operator"
end