Revision 66359a5e
Added by Pierre-Loïc Garoche about 7 years ago
src/backends/C/c_backend_main.ml | ||
---|---|---|
31 | 31 |
(* Main related functions *) |
32 | 32 |
(********************************************************************************************) |
33 | 33 |
|
34 |
let print_get_inputs fmt m = |
|
35 |
let pi fmt (id, v', v) = |
|
36 |
match (Types.unclock_type v.var_type).Types.tdesc with |
|
37 |
| Types.Tint -> fprintf fmt "%s = _get_int(f_in%i, \"%s\")" v.var_id id v'.var_id |
|
38 |
| Types.Tbool -> fprintf fmt "%s = _get_bool(f_in%i, \"%s\")" v.var_id id v'.var_id |
|
39 |
| Types.Treal when !Options.mpfr -> fprintf fmt "mpfr_set_d(%s, _get_double(f_in%i, \"%s\"), %i)" v.var_id id v'.var_id (Mpfr.mpfr_prec ()) |
|
40 |
| Types.Treal -> fprintf fmt "%s = _get_double(f_in%i, \"%s\")" v.var_id id v'.var_id |
|
41 |
| _ -> |
|
42 |
begin |
|
43 |
Global.main_node := !Options.main_node; |
|
44 |
Format.eprintf "Code generation error: %a%a@." |
|
45 |
Error.pp_error_msg Error.Main_wrong_kind |
|
46 |
Location.pp_loc v'.var_loc; |
|
47 |
raise (Error (v'.var_loc, Error.Main_wrong_kind)) |
|
48 |
end |
|
49 |
in |
|
50 |
List.iteri2 (fun idx v' v -> |
|
51 |
fprintf fmt "@ %a;" pi ((idx+1), v', v); |
|
52 |
) m.mname.node_inputs m.mstep.step_inputs |
|
53 | 34 |
|
54 | 35 |
let print_put_outputs fmt m = |
55 | 36 |
let po fmt (id, o', o) = |
56 | 37 |
let suff = string_of_int id in |
57 | 38 |
print_put_var fmt suff o'.var_id o.var_type o.var_id |
58 | 39 |
in |
59 |
Utils.List.iteri2 (fun idx v' v -> fprintf fmt "@ %a;" po ((idx+1), v', v)) m.mname.node_outputs m.mstep.step_outputs
|
|
40 |
List.iteri2 (fun idx v' v -> fprintf fmt "@ %a;" po ((idx+1), v', v)) m.mname.node_outputs m.mstep.step_outputs |
|
60 | 41 |
|
61 | 42 |
let print_main_inout_declaration basename fmt m = |
62 | 43 |
let mname = m.mname.node_id in |
Also available in: Unified diff
[general] large modification: added machine types, a second typing phase dealing with machine types (eg uint8)
typing was transformed as a functor and parametrized by basic types (int/real/bool)
it can also be applied multiple times on the same program