let initGlobals root complete =
mk_global_comment "//****************";
mk_global_comment "//* BEGIN Primitives generated for LTL verification";
mk_global_comment "//* ";
mk_global_comment "//* ";
mk_global_comment "//* Some constants";
make_enum_states ();
mk_global_c_enum_type
listOp (List.map (fun e -> func_to_op_func e) (getFunctions_from_c()));
mk_global_c_initialized_enum curOp listOp
(func_to_init (Kernel_function.get_name root));
mk_global_c_enum_type listStatus (callStatus::[termStatus]);
mk_global_c_initialized_enum
curOpStatus listStatus (funcStatus_to_init Promelaast.Call);
mk_global_comment "//* ";
mk_global_comment "//* States and Trans Variables";
let st_init = get_states_trans_init root in
if Aorai_option.Deterministic.get () then begin
mk_global_c_var_init curState (getInitialState());
end else begin
mk_global_c_initialized_array curState (getNumberOfStates()) st_init;
end;
if complete then
begin
mk_global_comment "//* ";
mk_global_comment "//* Loops management";
mk_decl_loops_init ();
end;
if Aorai_option.Deterministic.get () then begin
mk_global_comment "//* ";
mk_global_comment "//**************** ";
mk_global_comment "//* Proof that the automaton is deterministic";
mk_global_comment "//* ";
mk_deterministic_lemma ();
end;
mk_global_comment "//* ";
mk_global_comment "//****************** ";
mk_global_comment "//* Auxiliary variables used in transition conditions";
mk_global_comment "//*";
List.iter mk_global_var (Data_for_aorai.aux_variables());
(match Data_for_aorai.abstract_logic_info () with
| [] -> ()
| l ->
let annot =
Daxiomatic
("Aorai_pebble_axiomatic",
List.map
(fun li -> Dfun_or_pred(li,Cil_datatype.Location.unknown)) l,
Cil_datatype.Location.unknown)
in
Globals.Annotations.add_user annot;
mk_global (GAnnot(annot, Cil_datatype.Location.unknown)));
mk_global_comment "//* ";
mk_global_comment "//* END Primitives generated for LTL verification";
mk_global_comment "//****************";
flush_globals()