let compile comp =
let prefix = if comp.cstruct then "S_" else "U_" in
let record_id = LogicId.create (prefix ^ comp.cname) in
let record_fields = ref [] in
let compile_fields = ref Fmap.empty in
List.iter
(fun f ->
let field = {
LogicTau.f_name = LogicId.create ("F_" ^ f.fname) ;
LogicTau.f_type = !dtau_ctype f.ftype ;
LogicTau.f_record = record_id ;
} in
record_fields := field :: !record_fields ;
compile_fields := Fmap.add f field !compile_fields ;
) comp.cfields ;
let descr = {
t_source = fst (List.hd comp.cfields).floc ;
t_short = (if comp.cstruct then "struct " else "union ") ^ comp.corig_name ;
t_descr = "" ;
} in
LogicDef.declare {
d_name = record_id ;
d_item = RECORD (List.rev !record_fields) ;
d_descr = descr ;
} ;
(record_id , !compile_fields)