1
|
(** This function focuses on standard library calls: conversion functions and
|
2
|
math library. It could be later extended to handle more functions. For the
|
3
|
moment, modular compilation of multiple lustre sources as one output JSON is not
|
4
|
considered. *)
|
5
|
|
6
|
open LustreSpec
|
7
|
open Machine_code
|
8
|
open Format
|
9
|
open EMF_common
|
10
|
|
11
|
let pp_call fmt m f outputs inputs =
|
12
|
let (decl, _) = List.assoc f m.mcalls in
|
13
|
if Corelang.is_imported_node decl then
|
14
|
let inode = Corelang.imported_node_of_top decl in
|
15
|
match inode.nodei_id, Filename.basename decl.top_decl_owner with
|
16
|
| name, (("math" | "conv") as lib) -> (
|
17
|
fprintf fmt "\"kind\": \"functioncall\",@ \"name\": \"%s\",@ \"library\": \"%s\",@ "
|
18
|
name lib;
|
19
|
fprintf fmt "\"lhs\": [@[%a@]],@ \"args\": [@[%a@]]"
|
20
|
(Utils.fprintf_list ~sep:",@ " (fun fmt v -> fprintf fmt "\"%a\"" Printers.pp_var_name v)) outputs
|
21
|
pp_emf_cst_or_var_list inputs
|
22
|
)
|
23
|
| _ ->
|
24
|
Format.eprintf "Calls to function %s in library %s are not handled yet.@."
|
25
|
inode.nodei_id
|
26
|
(Filename.basename decl.top_decl_owner)
|
27
|
;
|
28
|
assert false
|
29
|
else
|
30
|
assert false (* shall not happen *)
|
31
|
|
32
|
|
33
|
|
34
|
|
35
|
(* Local Variables: *)
|
36
|
(* compile-command: "make -C ../.." *)
|
37
|
(* End: *)
|
38
|
|