From 089f94be1a2e20008f617d37955205920f1793b5 Mon Sep 17 00:00:00 2001
From: ploc <ploc@garoche.net>
Date: Fri, 30 Mar 2018 22:43:08 +0200
Subject: [PATCH] MLI for normalization and machine_code. Structs defining
 machines are now in machine_code_types

---
 src/backends/C/c_backend_common.ml            | 24 +++++++--------
 src/backends/C/c_backend_header.ml            | 12 ++++----
 src/backends/C/c_backend_mauve.ml             |  1 +
 src/backends/EMF/EMF_backend.ml               |  2 +-
 src/backends/EMF/EMF_common.ml                |  2 +-
 src/backends/EMF/EMF_library_calls.ml         |  2 +-
 src/backends/Horn/horn_backend.ml             |  2 +-
 .../Horn/horn_backend_collecting_sem.ml       |  2 +-
 src/backends/Horn/horn_backend_common.ml      |  2 +-
 src/backends/Horn/horn_backend_traces.ml      |  2 +-
 src/corelang.ml                               |  2 +-
 src/corelang.mli                              |  2 +-
 src/machine_code.ml                           | 27 -----------------
 src/machine_code.mli                          | 20 +++++++++++++
 src/machine_code_types.ml                     | 24 +++++++++++++++
 src/mpfr.ml                                   |  5 ++--
 src/normalization.mli                         |  2 ++
 src/pluginType.ml                             |  2 +-
 src/plugins/salsa/machine_salsa_opt.ml        | 30 +++++++++----------
 src/plugins/salsa/salsaDatatypes.ml           |  4 +--
 src/plugins/scopes/scopes.ml                  |  1 +
 21 files changed, 96 insertions(+), 74 deletions(-)
 create mode 100644 src/machine_code.mli
 create mode 100644 src/normalization.mli

diff --git a/src/backends/C/c_backend_common.ml b/src/backends/C/c_backend_common.ml
index 946cca32..ad4fbceb 100644
--- a/src/backends/C/c_backend_common.ml
+++ b/src/backends/C/c_backend_common.ml
@@ -12,7 +12,7 @@
 open Format
 open Lustre_types
 open Corelang
-open Machine_code
+open Machine_code_types
 
 
 let print_version fmt =
@@ -199,7 +199,7 @@ let rec pp_c_val self pp_var fmt v =
   | Cst c         -> pp_c_const fmt c
   | Array vl      -> fprintf fmt "{%a}" (Utils.fprintf_list ~sep:", " (pp_c_val self pp_var)) vl
   | Access (t, i) -> fprintf fmt "%a[%a]" (pp_c_val self pp_var) t (pp_c_val self pp_var) i
-  | Power (v, n)  -> (Format.eprintf "internal error: C_backend_common.pp_c_val %a@." pp_val v; assert false)
+  | Power (v, n)  -> (Format.eprintf "internal error: C_backend_common.pp_c_val %a@." Machine_code.pp_val v; assert false)
   | LocalVar v    -> pp_var fmt v
   | StateVar v    ->
     (* array memory vars are represented by an indirection to a local var with the right type,
@@ -219,11 +219,11 @@ let pp_c_var_read m fmt id =
   (* mpfr_t is a static array, not treated as general arrays *)
   if Types.is_address_type id.var_type
   then
-    if is_memory m id && not (Types.is_real_type id.var_type && !Options.mpfr)
+    if Machine_code.is_memory m id && not (Types.is_real_type id.var_type && !Options.mpfr)
     then fprintf fmt "(*%s)" id.var_id
     else fprintf fmt "%s" id.var_id
   else
-    if is_output m id
+    if Machine_code.is_output m id
     then fprintf fmt "*%s" id.var_id
     else fprintf fmt "%s" id.var_id
 
@@ -237,7 +237,7 @@ let pp_c_var_write m fmt id =
   then
     fprintf fmt "%s" id.var_id
   else
-    if is_output m id
+    if Machine_code.is_output m id
     then
       fprintf fmt "%s" id.var_id
     else
@@ -274,7 +274,7 @@ let pp_c_decl_local_var m fmt id =
   then
     Format.fprintf fmt "%a = %a"
       (pp_c_type  ~var_opt:(Some id) id.var_id) id.var_type
-      (pp_c_val "" (pp_c_var_read m)) (get_const_assign m id)
+      (pp_c_val "" (pp_c_var_read m)) (Machine_code.get_const_assign m id)
   else
     Format.fprintf fmt "%a"
       (pp_c_type  ~var_opt:(Some id) id.var_id) id.var_type
@@ -322,7 +322,7 @@ let pp_registers_struct fmt m =
     ()
 
 let print_machine_struct fmt m =
-  if fst (get_stateless_status m) then
+  if fst (Machine_code.get_stateless_status m) then
     begin
     end
   else
@@ -464,7 +464,7 @@ let pp_c_main_var_output fmt id =
     fprintf fmt "&%s" id.var_id
 
 let pp_main_call mname self fmt m (inputs: Machine_code_types.value_t list) (outputs: var_decl list) =
-  if fst (get_stateless_status m)
+  if fst (Machine_code.get_stateless_status m)
   then
     fprintf fmt "%a (%a%t%a);"
       pp_machine_step_name mname
@@ -482,11 +482,11 @@ let pp_main_call mname self fmt m (inputs: Machine_code_types.value_t list) (out
 
 let pp_c_var m self pp_var fmt var =
   let open Machine_code_types in
-  if is_memory m var
+  if Machine_code.is_memory m var
   then
-    pp_c_val self pp_var fmt (mk_val (StateVar var) var.var_type)
+    pp_c_val self pp_var fmt (Machine_code.mk_val (StateVar var) var.var_type)
   else
-    pp_c_val self pp_var fmt (mk_val (LocalVar var) var.var_type)
+    pp_c_val self pp_var fmt (Machine_code.mk_val (LocalVar var) var.var_type)
   
 
 let pp_array_suffix fmt loop_vars =
@@ -519,7 +519,7 @@ let pp_initialize m self pp_var fmt var =
 
 let pp_const_initialize pp_var fmt const =
   let open Machine_code_types in
-  let var = mk_val (LocalVar (Corelang.var_decl_of_const const)) const.const_type in
+  let var = Machine_code.mk_val (LocalVar (Corelang.var_decl_of_const const)) const.const_type in
   let rec aux indices value fmt typ =
     if Types.is_array_type typ
     then
diff --git a/src/backends/C/c_backend_header.ml b/src/backends/C/c_backend_header.ml
index acadeebe..07d08268 100644
--- a/src/backends/C/c_backend_header.ml
+++ b/src/backends/C/c_backend_header.ml
@@ -12,7 +12,7 @@
 open Format 
 open Lustre_types
 open Corelang
-open Machine_code
+open Machine_code_types
 open C_backend_common
 
 (********************************************************************************************)
@@ -22,7 +22,7 @@ open C_backend_common
 
 module type MODIFIERS_HDR =
 sig
-  val print_machine_decl_prefix: Format.formatter -> Machine_code.machine_t -> unit
+  val print_machine_decl_prefix: Format.formatter -> Machine_code_types.machine_t -> unit
 end
 
 module EmptyMod =
@@ -44,9 +44,9 @@ let print_import_standard fmt =
 	fprintf fmt "#include <mpfr.h>@."
       end;
     if !Options.cpp then
-      fprintf fmt "#include \"%s/arrow.hpp\"@.@." arrow_top_decl.top_decl_owner 
+      fprintf fmt "#include \"%s/arrow.hpp\"@.@." Machine_code.arrow_top_decl.top_decl_owner 
     else
-      fprintf fmt "#include \"%s/arrow.h\"@.@." arrow_top_decl.top_decl_owner 
+      fprintf fmt "#include \"%s/arrow.h\"@.@." Machine_code.arrow_top_decl.top_decl_owner 
 	
   end
 
@@ -162,7 +162,7 @@ let print_static_alloc_macro fmt (m, attr, inst) =
 let print_machine_decl fmt m =
   begin
     Mod.print_machine_decl_prefix fmt m;
-    if fst (get_stateless_status m) then
+    if fst (Machine_code.get_stateless_status m) then
       begin
 	fprintf fmt "extern %a;@.@."
 	  print_stateless_prototype
@@ -211,7 +211,7 @@ let print_machine_decl fmt m =
 
 let print_machine_alloc_decl fmt m =
   Mod.print_machine_decl_prefix fmt m;
-  if fst (get_stateless_status m) then
+  if fst (Machine_code.get_stateless_status m) then
     begin
     end
   else
diff --git a/src/backends/C/c_backend_mauve.ml b/src/backends/C/c_backend_mauve.ml
index 2bc69fef..86f9d4f6 100644
--- a/src/backends/C/c_backend_mauve.ml
+++ b/src/backends/C/c_backend_mauve.ml
@@ -1,4 +1,5 @@
 open Lustre_types
+open Machine_code_types
 open Corelang
 open Machine_code
 open Format
diff --git a/src/backends/EMF/EMF_backend.ml b/src/backends/EMF/EMF_backend.ml
index 5098a643..636f596a 100644
--- a/src/backends/EMF/EMF_backend.ml
+++ b/src/backends/EMF/EMF_backend.ml
@@ -245,7 +245,7 @@ let merge_branches instrs =
     | _ -> assert false
   in
   let sorted_branches = List.sort sorting_branches branches in
-  instrs @ (join_guards_list sorted_branches)
+  instrs @ (Machine_code.join_guards_list sorted_branches)
     
 let rec pp_emf_instr m fmt i =
   let pp_content fmt i =
diff --git a/src/backends/EMF/EMF_common.ml b/src/backends/EMF/EMF_common.ml
index 8f97824f..31de7761 100644
--- a/src/backends/EMF/EMF_common.ml
+++ b/src/backends/EMF/EMF_common.ml
@@ -1,6 +1,6 @@
 open Lustre_types
 open Machine_code_types
-
+module VSet = Corelang.VSet
 open Format
 open Machine_code 
 
diff --git a/src/backends/EMF/EMF_library_calls.ml b/src/backends/EMF/EMF_library_calls.ml
index ece2efa7..353dbf59 100644
--- a/src/backends/EMF/EMF_library_calls.ml
+++ b/src/backends/EMF/EMF_library_calls.ml
@@ -4,7 +4,7 @@
     considered. *)
 
 open Lustre_types
-open Machine_code
+open Machine_code_types
 open Format
 open EMF_common
 
diff --git a/src/backends/Horn/horn_backend.ml b/src/backends/Horn/horn_backend.ml
index 0fb582ab..bdb3c6af 100644
--- a/src/backends/Horn/horn_backend.ml
+++ b/src/backends/Horn/horn_backend.ml
@@ -18,7 +18,7 @@
 open Format
 open Lustre_types
 open Corelang
-open Machine_code
+open Machine_code_types
 
 open Horn_backend_common
 open Horn_backend_printers
diff --git a/src/backends/Horn/horn_backend_collecting_sem.ml b/src/backends/Horn/horn_backend_collecting_sem.ml
index 4111eaf0..9c28a488 100644
--- a/src/backends/Horn/horn_backend_collecting_sem.ml
+++ b/src/backends/Horn/horn_backend_collecting_sem.ml
@@ -18,7 +18,7 @@
 open Format
 open Lustre_types
 open Corelang
-open Machine_code
+open Machine_code_types
 
 open Horn_backend_common
 open Horn_backend_printers
diff --git a/src/backends/Horn/horn_backend_common.ml b/src/backends/Horn/horn_backend_common.ml
index ce756a4a..a8e677e4 100644
--- a/src/backends/Horn/horn_backend_common.ml
+++ b/src/backends/Horn/horn_backend_common.ml
@@ -11,8 +11,8 @@
 
 open Format
 open Lustre_types
+open Machine_code_types
 open Corelang
-open Machine_code
 
 let pp_machine_reset_name fmt id = fprintf fmt "%s_reset" id
 let pp_machine_step_name fmt id = fprintf fmt "%s_step" id
diff --git a/src/backends/Horn/horn_backend_traces.ml b/src/backends/Horn/horn_backend_traces.ml
index 6f4060c8..3e67a632 100644
--- a/src/backends/Horn/horn_backend_traces.ml
+++ b/src/backends/Horn/horn_backend_traces.ml
@@ -18,7 +18,7 @@
 open Format
 open Lustre_types
 open Corelang
-open Machine_code
+open Machine_code_types
 
 open Horn_backend_common
 open Horn_backend_printers
diff --git a/src/corelang.ml b/src/corelang.ml
index 6aaf1331..7893f5fe 100755
--- a/src/corelang.ml
+++ b/src/corelang.ml
@@ -25,7 +25,7 @@ end
 
 module VMap = Map.Make(VDeclModule)
 
-module VSet = Set.Make(VDeclModule)
+module VSet : Set.S with type elt = var_decl = Set.Make(VDeclModule)
 
 let dummy_type_dec = {ty_dec_desc=Tydec_any; ty_dec_loc=Location.dummy_loc}
 
diff --git a/src/corelang.mli b/src/corelang.mli
index 4c08dfcf..9cf9dac0 100755
--- a/src/corelang.mli
+++ b/src/corelang.mli
@@ -13,7 +13,7 @@
 open Lustre_types
 
 exception Error of Location.t * Error.error_kind
-module VSet: Set.S
+module VSet: Set.S with type elt = Lustre_types.var_decl 
   
 val dummy_type_dec: type_dec
 val dummy_clock_dec: clock_dec
diff --git a/src/machine_code.ml b/src/machine_code.ml
index 7010d811..45981f63 100644
--- a/src/machine_code.ml
+++ b/src/machine_code.ml
@@ -19,10 +19,6 @@ let print_statelocaltag = true
   
 exception NormalizationError
 
-module OrdVarDecl:Map.OrderedType with type t=var_decl =
-  struct type t = var_decl;; let compare = compare end
-
-module VSet = Set.Make(OrdVarDecl)
 
 let rec pp_val fmt v =
   match v.value_desc with
@@ -77,29 +73,6 @@ and pp_branch fmt (t, h) =
 and pp_instrs fmt il =
   Format.fprintf fmt "@[<v 2>%a@]" (Utils.fprintf_list ~sep:"@," pp_instr) il
 
-type step_t = {
-  step_checks: (Location.t * value_t) list;
-  step_inputs: var_decl list;
-  step_outputs: var_decl list;
-  step_locals: var_decl list;
-  step_instrs: instr_t list;
-  step_asserts: value_t list;
-}
-
-type static_call = top_decl * (Dimension.dim_expr list)
-
-type machine_t = {
-  mname: node_desc;
-  mmemory: var_decl list;
-  mcalls: (ident * static_call) list; (* map from stateful/stateless instance to node, no internals *)
-  minstances: (ident * static_call) list; (* sub-map of mcalls, from stateful instance to node *)
-  minit: instr_t list;
-  mstatic: var_decl list; (* static inputs only *)
-  mconst: instr_t list; (* assignments of node constant locals *)
-  mstep: step_t;
-  mspec: node_annot option;
-  mannot: expr_annot list;
-}
 
 (* merge log: get_node_def was in c0f8 *)
 (* Returns the node/machine associated to id in m calls *)
diff --git a/src/machine_code.mli b/src/machine_code.mli
new file mode 100644
index 00000000..0458fc5a
--- /dev/null
+++ b/src/machine_code.mli
@@ -0,0 +1,20 @@
+val pp_val: Format.formatter -> Machine_code_types.value_t -> unit
+val is_memory: Machine_code_types.machine_t -> Lustre_types.var_decl -> bool
+val is_output: Machine_code_types.machine_t -> Lustre_types.var_decl -> bool
+val is_const_value: Machine_code_types.value_t -> bool
+val get_const_assign: Machine_code_types.machine_t -> Lustre_types.var_decl -> Machine_code_types.value_t
+val get_stateless_status: Machine_code_types.machine_t -> bool * bool
+val mk_val: Machine_code_types.value_t_desc -> Types.type_expr -> Machine_code_types.value_t
+val empty_machine: Machine_code_types.machine_t
+val arrow_machine: Machine_code_types.machine_t
+val arrow_id: string
+val arrow_top_decl: Lustre_types.top_decl
+val value_of_dimension: Machine_code_types.machine_t -> Dimension.dim_expr -> Machine_code_types.value_t
+val dimension_of_value:Machine_code_types.value_t -> Dimension.dim_expr
+val pp_instr: Format.formatter -> Machine_code_types.instr_t -> unit
+val pp_instrs: Format.formatter -> Machine_code_types.instr_t list -> unit
+val pp_machines: Format.formatter -> Machine_code_types.machine_t list -> unit
+val get_machine_opt: string -> Machine_code_types.machine_t list -> Machine_code_types.machine_t option
+val get_node_def: string -> Machine_code_types.machine_t -> Lustre_types.node_desc
+val join_guards_list: Machine_code_types.instr_t list -> Machine_code_types.instr_t list
+val translate_prog: Lustre_types.program -> Scheduling.schedule_report Utils.IMap.t  -> Machine_code_types.machine_t list
diff --git a/src/machine_code_types.ml b/src/machine_code_types.ml
index c82754c2..692684ab 100644
--- a/src/machine_code_types.ml
+++ b/src/machine_code_types.ml
@@ -30,3 +30,27 @@ and instr_t_desc =
   | MStep of var_decl list * ident * value_t list
   | MBranch of value_t * (label * instr_t list) list
   | MComment of string
+
+      type step_t = {
+  step_checks: (Location.t * value_t) list;
+  step_inputs: var_decl list;
+  step_outputs: var_decl list;
+  step_locals: var_decl list;
+  step_instrs: instr_t list;
+  step_asserts: value_t list;
+}
+
+type static_call = top_decl * (Dimension.dim_expr list)
+
+type machine_t = {
+  mname: node_desc;
+  mmemory: var_decl list;
+  mcalls: (ident * static_call) list; (* map from stateful/stateless instance to node, no internals *)
+  minstances: (ident * static_call) list; (* sub-map of mcalls, from stateful instance to node *)
+  minit: instr_t list;
+  mstatic: var_decl list; (* static inputs only *)
+  mconst: instr_t list; (* assignments of node constant locals *)
+  mstep: step_t;
+  mspec: node_annot option;
+  mannot: expr_annot list;
+}
diff --git a/src/mpfr.ml b/src/mpfr.ml
index 363f3d08..8cd62208 100755
--- a/src/mpfr.ml
+++ b/src/mpfr.ml
@@ -17,7 +17,8 @@ open Normalization
 open Machine_code
 
 let mpfr_module = mktop (Open(false, "mpfr_lustre"))
-
+let cpt_fresh = ref 0
+  
 let mpfr_rnd () = "MPFR_RNDN"
 
 let mpfr_prec () = !Options.mpfr_prec
@@ -140,7 +141,7 @@ let rec inject_list alias node inject_element defvars elist =
     ) elist (defvars, [])
 
 let rec inject_expr ?(alias=true) node defvars expr =
-let res=
+let res =
   match expr.expr_desc with
   | Expr_const (Const_real _)  -> mk_expr_alias_opt alias node defvars expr
   | Expr_const (Const_array _) -> inject_expr ~alias:alias node defvars (expr_of_const_array expr)
diff --git a/src/normalization.mli b/src/normalization.mli
new file mode 100644
index 00000000..a24a9452
--- /dev/null
+++ b/src/normalization.mli
@@ -0,0 +1,2 @@
+val mk_expr_alias_opt: bool -> Lustre_types.node_desc -> (Lustre_types.eq list * Lustre_types.var_decl list)-> Lustre_types.expr -> (Lustre_types.eq list * Lustre_types.var_decl list) * Lustre_types.expr
+val normalize_prog: ?backend:string -> Lustre_types.program -> Lustre_types.program
diff --git a/src/pluginType.ml b/src/pluginType.ml
index 8850e3af..3af5b490 100644
--- a/src/pluginType.ml
+++ b/src/pluginType.ml
@@ -5,7 +5,7 @@ sig
   val options: (string * Arg.spec * string) list
   val check_force_stateful : unit -> bool
   val refine_machine_code: Lustre_types.top_decl list ->
-    Machine_code.machine_t list -> Machine_code.machine_t list
+    Machine_code_types.machine_t list -> Machine_code_types.machine_t list
   val c_backend_main_loop_body_prefix : string -> string -> Format.formatter ->  unit -> unit
   val c_backend_main_loop_body_suffix : Format.formatter ->  unit -> unit
 end
diff --git a/src/plugins/salsa/machine_salsa_opt.ml b/src/plugins/salsa/machine_salsa_opt.ml
index 999456ea..283d3d0f 100644
--- a/src/plugins/salsa/machine_salsa_opt.ml
+++ b/src/plugins/salsa/machine_salsa_opt.ml
@@ -22,7 +22,7 @@ let fun_types node =
 let called_node_id m id = 
   let td, _ =
     try
-      List.assoc id m.MC.mcalls (* TODO Xavier: mcalls or minstances ? *)
+      List.assoc id m.MT.mcalls (* TODO Xavier: mcalls or minstances ? *)
     with Not_found -> assert false
   in
   td
@@ -350,7 +350,7 @@ let rec rewrite_instrs nodename m constEnv  vars_env m instrs ranges formalEnv p
 									 produced
 									   variables *)
 	    Format.eprintf "Requited vars: %a@." Vars.pp required_vars;
-	    let required_vars = Vars.diff required_vars (Vars.of_list m.MC.mmemory) in
+	    let required_vars = Vars.diff required_vars (Vars.of_list m.MT.mmemory) in
 	    let prefix_instr, ranges = 
 	      assign_vars printed_vars ranges formalEnv required_vars in
 
@@ -532,7 +532,7 @@ let salsaStep constEnv  m s =
 	  | ["salsa"; "ranges"; var] -> (var, range)::accu
 	  | _ -> accu
       ) accu annl.LT.annots
-  ) [] m.MC.mannot
+  ) [] m.MT.mannot
   in
   let ranges = 
     List.fold_left (fun ranges (v, value) ->
@@ -565,8 +565,8 @@ let salsaStep constEnv  m s =
     Vars.real_vars  
       (
 	Vars.union 
-	  (Vars.of_list m.MC.mmemory) 
-	  (Vars.of_list s.MC.step_outputs) 
+	  (Vars.of_list m.MT.mmemory) 
+	  (Vars.of_list s.MT.step_outputs) 
       )
   in 
   (* TODO: should be at least step output + may be memories *)
@@ -575,39 +575,39 @@ let salsaStep constEnv  m s =
   if !debug then Format.eprintf "@[<v 2>Registering node equations@ "; 
   let new_instrs, _, _, printed_vars, _ = 
     rewrite_instrs
-      m.MC.mname.LT.node_id
+      m.MT.mname.LT.node_id
       m
       constEnv 
       vars_env
       m
-      s.MC.step_instrs
+      s.MT.step_instrs
       ranges
       formal_env
-      (Vars.real_vars (Vars.of_list s.MC.step_inputs (* printed_vars : real
+      (Vars.real_vars (Vars.of_list s.MT.step_inputs (* printed_vars : real
 							inputs are considered as
 							already printed *)))
       vars_to_print 
   in
-  let all_local_vars = Vars.real_vars (Vars.of_list s.MC.step_locals) in
+  let all_local_vars = Vars.real_vars (Vars.of_list s.MT.step_locals) in
   let unused = (Vars.diff all_local_vars printed_vars) in
   let locals =
     if not (Vars.is_empty unused) then (
       Format.eprintf "Unused local vars: [%a]. Removing them.@.@?"
 	Vars.pp unused;
-      List.filter (fun v -> not (Vars.mem v unused)) s.MC.step_locals
+      List.filter (fun v -> not (Vars.mem v unused)) s.MT.step_locals
     )
     else
-      s.MC.step_locals
+      s.MT.step_locals
   in
-  { s with MC.step_instrs = new_instrs; MC.step_locals = locals } (* we have also to modify local variables to declare new vars *)
+  { s with MT.step_instrs = new_instrs; MT.step_locals = locals } (* we have also to modify local variables to declare new vars *)
 
 
 let machine_t2machine_t_optimized_by_salsa constEnv  mt =
   try
-    if !debug then Format.eprintf "@[<v 8>[salsa] Optimizing machine %s@ " mt.MC.mname.LT.node_id;
-    let new_step = salsaStep constEnv  mt mt.MC.mstep in
+    if !debug then Format.eprintf "@[<v 8>[salsa] Optimizing machine %s@ " mt.MT.mname.LT.node_id;
+    let new_step = salsaStep constEnv  mt mt.MT.mstep in
     if !debug then Format.eprintf "@]@ ";
-    { mt with MC.mstep = new_step } 
+    { mt with MT.mstep = new_step } 
     
       
   with FormalEnv.NoDefinition v as exp -> 
diff --git a/src/plugins/salsa/salsaDatatypes.ml b/src/plugins/salsa/salsaDatatypes.ml
index b0f8d25d..379acf39 100644
--- a/src/plugins/salsa/salsaDatatypes.ml
+++ b/src/plugins/salsa/salsaDatatypes.ml
@@ -212,14 +212,14 @@ let compute_vars_env m =
     List.fold_left 
       (fun accu v -> VarEnv.add v.LT.var_id {vdecl = v; is_local = false; } accu) 
       env 
-      m.MC.mmemory
+      m.MT.mmemory
   in
   let env = 
     List.fold_left (
       fun accu v -> VarEnv.add v.LT.var_id {vdecl = v; is_local = true; } accu
     )
       env
-      MC.(m.mstep.step_inputs@m.mstep.step_outputs@m.mstep.step_locals)
+      MC.(m.MT.mstep.MT.step_inputs@m.MT.mstep.MT.step_outputs@m.MT.mstep.MT.step_locals)
   in
 env
 
diff --git a/src/plugins/scopes/scopes.ml b/src/plugins/scopes/scopes.ml
index 24f9456d..79625091 100644
--- a/src/plugins/scopes/scopes.ml
+++ b/src/plugins/scopes/scopes.ml
@@ -1,5 +1,6 @@
 open Lustre_types 
 open Corelang 
+open Machine_code_types
 open Machine_code
 
 (* (variable, node name, node instance) *)
-- 
GitLab