let file f =
let filter_defined = function GFun _ | GVar _ -> true | _ -> false in
let defined_var =
function GFun(f,_) -> f.svar | GVar(vi,_,_) -> vi | _ -> assert false
in
let globals =
(* AVOID CHECKING THE GLOBAL INITIALIZATION FUNCTION, WHICH IS GUARANTEED *)
(* if Globals.has_entry_point () then *)
(* let gif = *)
(* Kernel_function.get_definition (Globals.Functions.get_glob_init f) *)
(* in *)
(* f.globals @ [GFun(gif,Loc.dummy_position)] *)
(* else *)f.globals
in
let vardefs =
List.rev (List.rev_map defined_var (List.filter filter_defined globals))
in
(* Compute translation of [globals] before [integral_types] so that types
used are known *)
let globals' =
List.flatten (List.rev (List.rev_map (global vardefs) globals))
in
mkdecl (JCDaxiomatic("Padding",
[mkdecl (JCDlogic_type name_of_padding_type)
Loc.dummy_position]))
Loc.dummy_position
(* Define all integral types as enumerated types in Jessie *)
:: integral_types ()
(* Define conversion functions and identity axiom for back
and forth conversion *)
@ type_conversions ()
@ globals'