let compile compinfo =
let record = record_of compinfo in
let cid = LogicId.create ("Eq_" ^ compinfo.cname) in
let pool = LogicLang.pool () in
let a = LogicLang.fresh pool "a" (Record record) in
let b = LogicLang.fresh pool "b" (Record record) in
let a_val = e_var a in
let b_val = e_var b in
let eq_field f =
let fd = field_of f in
!deq_ctype f.Cil_types.ftype (e_getfield a_val fd) (e_getfield b_val fd)
in
let condition = p_conj (List.map eq_field compinfo.cfields) in
LogicDef.declare {
d_name = cid ;
d_item = PREDICATE([a;b],Some condition) ;
d_descr = {
t_source = Lexing.dummy_pos ;
t_short = "equality for " ^ compinfo.corig_name ;
t_descr = "" ;
} ;
} ; cid