Skip to content
Snippets Groups Projects
Commit 51aee8f3 authored by Virgile Prevosto's avatar Virgile Prevosto
Browse files

[logic] Cosmetic transformation

Converting a boolean `b` into predicate with `b != \false`
is definitely too ugly.
parent d9c0c704
No related branches found
No related tags found
No related merge requests found
...@@ -343,24 +343,24 @@ let is_zero_comparable t = ...@@ -343,24 +343,24 @@ let is_zero_comparable t =
let scalar_term_conversion conversion t = let scalar_term_conversion conversion t =
let loc = t.term_loc in let loc = t.term_loc in
let arith_conversion () = conversion ~loc (Cil.lzero ~loc ()) t in let arith_conversion () = conversion ~loc false t (Cil.lzero ~loc ()) in
let ptr_conversion () = let ptr_conversion () =
conversion ~loc (Logic_const.term ~loc Tnull t.term_type) t conversion ~loc false t (Logic_const.term ~loc Tnull t.term_type)
in in
match unroll_type t.term_type with match unroll_type t.term_type with
| Ctype (TInt _) -> arith_conversion () | Ctype (TInt _) -> arith_conversion ()
| Ctype (TFloat _) -> | Ctype (TFloat _) ->
conversion ~loc (Logic_const.treal_zero ~loc ~ltyp:t.term_type ()) t conversion ~loc false t (Logic_const.treal_zero ~loc ~ltyp:t.term_type ())
| Ctype (TPtr _) -> ptr_conversion () | Ctype (TPtr _) -> ptr_conversion ()
| Ctype (TArray _) -> ptr_conversion () | Ctype (TArray _) -> ptr_conversion ()
(* Could be transformed to \true: an array is never \null *) (* Could be transformed to \true: an array is never \null *)
| Ctype (TFun _) -> ptr_conversion () | Ctype (TFun _) -> ptr_conversion ()
(* decay as pointer *) (* decay as pointer *)
| Linteger -> arith_conversion () | Linteger -> arith_conversion ()
| Lreal -> conversion ~loc (Logic_const.treal_zero ~loc ()) t | Lreal -> conversion ~loc false t (Logic_const.treal_zero ~loc ())
| Ltype ({lt_name = name},[]) when name = Utf8_logic.boolean -> | Ltype ({lt_name = name},[]) when name = Utf8_logic.boolean ->
let ctrue = Logic_env.Logic_ctor_info.find "\\false" in let ctrue = Logic_env.Logic_ctor_info.find "\\true" in
conversion ~loc (term ~loc (TDataCons(ctrue,[])) boolean_type) t conversion ~loc true t (term ~loc (TDataCons(ctrue,[])) boolean_type)
| Ltype _ | Lvar _ | Larrow _ | Ltype _ | Lvar _ | Larrow _
| Ctype (TVoid _ | TNamed _ | TComp _ | TEnum _ | TBuiltin_va_list _) | Ctype (TVoid _ | TNamed _ | TComp _ | TEnum _ | TBuiltin_va_list _)
-> Kernel.fatal -> Kernel.fatal
...@@ -368,12 +368,14 @@ let scalar_term_conversion conversion t = ...@@ -368,12 +368,14 @@ let scalar_term_conversion conversion t =
Cil_printer.pp_logic_type t.term_type Cil_printer.pp_logic_type t.term_type
let scalar_term_to_predicate = let scalar_term_to_predicate =
let conversion ~loc zero t = prel ~loc (Cil_types.Rneq, t, zero) in let conversion ~loc is_eq t1 t2 =
let op = if is_eq then Req else Rneq in prel ~loc (op, t1, t2) in
scalar_term_conversion conversion scalar_term_conversion conversion
let scalar_term_to_boolean = let scalar_term_to_boolean =
let conversion ~loc zero t = let conversion ~loc is_eq t1 t2 =
term ~loc (TBinOp(Ne,t,zero)) Logic_const.boolean_type let op = if is_eq then Eq else Ne in
term ~loc (TBinOp(op,t1,t2)) Logic_const.boolean_type
in in
scalar_term_conversion conversion scalar_term_conversion conversion
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment