From f3593fa0cb8a7ba956eb46b6710c583fda5fcb8c Mon Sep 17 00:00:00 2001
From: Erwan Jahier <jahier@imag.fr>
Date: Wed, 28 May 2008 16:18:58 +0200
Subject: [PATCH] Dissallow (in  the parser) the possibility to  define
 anonymous struct (which was not supported anyway).

Fix all  the nonreg  test input  files to conform  to new  the struct
syntax (and  re-indent them sometimes). Since that  fixed some compil
errors, it also revealed quite a lot of other type errors!  Therefore
I have also fixed the nonreg test input files so that they compile.
---
 src/compiledDataDump.ml                       |    5 +-
 src/parser.mly                                |    4 +-
 src/test/Makefile                             |    2 +-
 src/test/should_work/Pascal/newpacks.lus      |    4 +-
 src/test/should_work/Pascal/p.lus             |    2 +-
 src/test/should_work/fab_test/morel4.lus      |    2 +-
 src/test/should_work/fab_test/morel5.lus      |    2 +-
 .../lionel/ProduitBool/produitBool.lus        |   44 +-
 src/test/should_work/lionel/calculs_max.lus   |   12 +-
 src/test/should_work/lionel/deSimone.lus      |    5 +-
 src/test/should_work/lionel/moyenne.lus       |    6 +-
 src/test/should_work/lionel/normal.lus        |    8 +-
 src/test/should_work/lionel/testSilus.lus     |   11 +-
 src/test/should_work/lionel/triSel.lus        |   22 +-
 .../contractForElementSelectionInArray.lus    |   29 +-
 .../packageTableau.lus                        |   40 +-
 src/test/test.res.exp                         | 1471 ++++++++++++++---
 17 files changed, 1393 insertions(+), 276 deletions(-)

diff --git a/src/compiledDataDump.ml b/src/compiledDataDump.ml
index db0ef21c..f86ffda2 100644
--- a/src/compiledDataDump.ml
+++ b/src/compiledDataDump.ml
@@ -42,7 +42,7 @@ and string_of_type_eff_ext = function
       let f sep acc s  = acc ^ sep ^ (long s) in
 	(List.fold_left (f ", ")  (f "" "enum {" (List.hd sl)) (List.tl sl)) ^ "}"
   | Array_type_eff_ext (ty, sz) -> sprintf "%s^%d" (string_of_type_eff_ext ty) sz
-  | Struct_type_eff_ext (i, fl) -> 
+  | Struct_type_eff_ext (name, fl) -> 
       assert (fl <>[]);
       let f sep acc (id, (type_eff_ext, const_eff_opt))  = 
 	acc ^ sep ^ (Ident.to_string id) ^ " : " ^
@@ -51,7 +51,8 @@ and string_of_type_eff_ext = function
 	      None -> ""
 	    | Some ce -> " (" ^ (string_of_const_eff ce) ^ ")"
       in
-	(List.fold_left (f "; ")  (f "" " {" (List.hd fl)) (List.tl fl)) ^ "}"
+	(Ident.string_of_long name)^
+	  (List.fold_left (f "; ")  (f "" " {" (List.hd fl)) (List.tl fl)) ^ "}"
 	
   | Any -> "a"
   | Overload -> "o"
diff --git a/src/parser.mly b/src/parser.mly
index 56dad0e1..7f6bee08 100644
--- a/src/parser.mly
+++ b/src/parser.mly
@@ -1258,9 +1258,9 @@ sxCallByNameExpression:
 	/* on peut avoir une liste vide */
 	| sxIdentRef TK_OPEN_BRACE TK_CLOSE_BRACE
 		{ bynameexp $1.src (STRUCT_n $1.it) ([]) }
-	/* COMPATIBILITY : immediate "struct" without the type name */
+	/* COMPATIBILITY : immediate "struct" without the type name
 	| TK_OPEN_BRACE sxCallByNameParamList sxOptSemicol TK_CLOSE_BRACE
-		{ bynameexp $1 STRUCT_anonymous_n (List.rev $2) }
+		{ bynameexp $1 STRUCT_anonymous_n (List.rev $2) } */
 	;
 
 sxCallByNameParamList:
diff --git a/src/test/Makefile b/src/test/Makefile
index b65fa84b..d3b1e26d 100644
--- a/src/test/Makefile
+++ b/src/test/Makefile
@@ -62,7 +62,7 @@ errors:errors_nb
 	echo -e "There were $(shell grep Warning test_ok.res | wc -l) Warnings."
 	grep Warning test_ok.res || true
 	echo -e "There were $(shell grep Error test_ok.res | wc -l) errors."
-	grep error test_ok.res
+	grep Error test_ok.res
 
 
 
diff --git a/src/test/should_work/Pascal/newpacks.lus b/src/test/should_work/Pascal/newpacks.lus
index 09786067..af7dbdaf 100644
--- a/src/test/should_work/Pascal/newpacks.lus
+++ b/src/test/should_work/Pascal/newpacks.lus
@@ -44,11 +44,11 @@ body
    --package pbool is modSimple(bool);
    --package preal is modSimple(real);
 
-   --package pSel is modSimple( { i: int; b: bool; r: real } );
+   --package pSel is modSimple( selType{ i: int; b: bool; r: real } );
 	const n: int = -4;
 	node preced(in: selType) returns (out, out2: selType);
 	let
-      out2 = { i = 0; b = true; r = .0}; --pSel::fby1(in);
+      out2 = selType{ i = 0; b = true; r = .0}; --pSel::fby1(in);
   		out.i = pint::fby1(out2.i, in.i);
   		out.b = pbool::fby1(out2.b, in.b);
   		out.r = preal::fby1(out2.r, in.r);
diff --git a/src/test/should_work/Pascal/p.lus b/src/test/should_work/Pascal/p.lus
index 0c7ec262..2f584f7c 100644
--- a/src/test/should_work/Pascal/p.lus
+++ b/src/test/should_work/Pascal/p.lus
@@ -49,7 +49,7 @@ body
 	const n: int = -4;
 	node preced(in: selType) returns (out, out2: selType);
 	let
-      out2 = { i = 0; b = true; r = .0}; --pSel::fby1(in);
+      out2 = selType { i = 0; b = true; r = .0}; --pSel::fby1(in);
   		out.i = pint::fby1(out2.i, in.i);
   		out.b = pbool::fby1(out2.b, in.b);
   		out.r = preal::fby1(out2.r, in.r);
diff --git a/src/test/should_work/fab_test/morel4.lus b/src/test/should_work/fab_test/morel4.lus
index a6f80e8d..31428ce4 100644
--- a/src/test/should_work/fab_test/morel4.lus
+++ b/src/test/should_work/fab_test/morel4.lus
@@ -30,7 +30,7 @@ node mcmorel(i:int) returns (t:int^2);
 var
 	yo : toto;
 let
-	yo.titi = {in=i, out=i+1} ;
+	yo.titi = tube {in=i, out=i+1} ;
 	yo.tutu = true ;
 	t = [yo.titi.in, yo.titi.out] -> [pre(t[0])+1,pre(t[1])] ;
 	--t = [ 2, 3 ] ;
diff --git a/src/test/should_work/fab_test/morel5.lus b/src/test/should_work/fab_test/morel5.lus
index 0b76a785..3935b14b 100644
--- a/src/test/should_work/fab_test/morel5.lus
+++ b/src/test/should_work/fab_test/morel5.lus
@@ -27,7 +27,7 @@ node mcmorel(i:int) returns (t:int^2; u:int^2^2);
 var
 	yo : toto;
 let
-	yo.titi = {in=i; out=i+1} ;
+	yo.titi = tube {in=i; out=i+1} ;
 	yo.tutu = true ;
 	t = [yo.titi.in, yo.titi.out] -> [pre(t[0])+1,pre(t[1])] ;
 	u = [ [10,100], [1000,10000] ] ;
diff --git a/src/test/should_work/lionel/ProduitBool/produitBool.lus b/src/test/should_work/lionel/ProduitBool/produitBool.lus
index bb117d49..08b24096 100644
--- a/src/test/should_work/lionel/ProduitBool/produitBool.lus
+++ b/src/test/should_work/lionel/ProduitBool/produitBool.lus
@@ -3,18 +3,20 @@ const size :  int = 10;
 
 -- ligne[i] = acc_in.multiplieur[i] si i>=acc_in.acc_in_PLC.rank et i<acc_in.acc_in_PLC.rank + size
 -- ligne[i] = 0 sinon
-node shift(acc_in : Tacc_in) returns (ligne : bool^(2*size); 
-                                      bidon : Tacc_inShift2);
+node shift(acc_in : Tacc_in) returns (ligne : bool^(2*size));
+var 
+  bidon : Tacc_inShift2;
 let
-  bidon, ligne = fill<<shiftFill;2*size>>({multiplieur = acc_in.multiplieur; -- cet accumulateur n'est pas modifié
-                                          rank = acc_in.rank;  -- cet accumulateur n'est pas modifié
-                                          actual_rank = 0});  -- ce accumulateur sert juste à compter. A la fin il vaut toujours 20
+  bidon, ligne = fill<<shiftFill;2*size>>(
+        Tacc_inShift2{multiplieur = acc_in.multiplieur; -- cet accumulateur n'est pas modifié
+                rank = acc_in.rank;  -- cet accumulateur n'est pas modifié
+                actual_rank = 0});  -- ce accumulateur sert juste à compter. A la fin il vaut toujours 20
 tel
 
 node shiftFill(acc_in : Tacc_inShift2) returns (acc_out : Tacc_inShift2; elt_out : bool);
 let
   acc_out = 
-    {--acc_in_PLC =  acc_in.acc_in_PLC;
+   Tacc_inShift2 {--acc_in_PLC =  acc_in.acc_in_PLC;
      multiplieur = acc_in.multiplieur;
      rank = acc_in.rank;
      actual_rank = acc_in.actual_rank + 1};
@@ -38,14 +40,16 @@ type T_isElementOf_ = {eltToSearch : bool; iselementof : bool};
 node _isElementOf_(e : bool; t : bool^size) returns (iselementof : bool);
 var acc_out : T_isElementOf_;
 let
-  acc_out = red<<iterated_isElementOf_;bool>>({eltToSearch = e; iselementof = false}, t);
+  acc_out = red<<iterated_isElementOf_; size>>(
+        T_isElementOf_{eltToSearch = e; iselementof = false}, t);
   iselementof = acc_out.iselementof;
 tel
 
 
 node iterated_isElementOf_(acc_in : T_isElementOf_; elt_in : bool) returns (acc_out : T_isElementOf_);
 let
-  acc_out = {eltToSearch = acc_in.eltToSearch;
+  acc_out = T_isElementOf_{
+             eltToSearch = acc_in.eltToSearch;
              iselementof = acc_in.iselementof or acc_in.eltToSearch = elt_in};
 tel
 
@@ -55,14 +59,19 @@ type iteratedStruct = {currentRank : int; rankToSelect : int; elementSelected :
 node selectElementOfRank_inArray_(rankToSelect : int;array : bool^size) returns (elementSelected : bool)
 var iterationResult : iteratedStruct;
 let
-  iterationResult = red<<selectOneStage;size>>({currentRank = 0; rankToSelect = rankToSelect; elementSelected = array[0]}, array);
+  iterationResult = red<<selectOneStage;size>>(
+                               iteratedStruct{currentRank = 0; 
+                                               rankToSelect = rankToSelect; 
+                                               elementSelected = array[0]}, 
+                                               array);
   elementSelected = iterationResult.elementSelected; 
 tel
 
 
 node selectOneStage(acc_in : iteratedStruct; currentElt : bool) returns (acc_out : iteratedStruct)
 let
-  acc_out = {currentRank = acc_in.currentRank+1;
+  acc_out = iteratedStruct
+            {currentRank = acc_in.currentRank+1;
              rankToSelect = acc_in.rankToSelect;
              elementSelected = if(acc_in.currentRank=acc_in.rankToSelect)
                                then currentElt
@@ -89,7 +98,8 @@ type Tacc_inShift2 = {
 
 
 
-node PLC(acc_in : Tacc_in; multiplicande : bool) returns (ligne : bool^(2*size));
+node PLC(acc_in  : Tacc_in; multiplicande : bool) 
+returns (acc_out:  Tacc_in; ligne : bool^(2*size));
 let
   ligne = if multiplicande=false
           then multiplicande ^ (2*size)
@@ -100,11 +110,17 @@ tel
 node produitBool(multiplicande, multiplieur : bool^size)
 --returns (produit :  bool^(2*n));
 returns (matrice : bool^(2*size)^size);
-var bidon : Tacc_in;
+-- var bidon : Tacc_in;
 --    matrice : bool^2size^size;
 let
-  bidon, matrice = map_red<<PLC, size>>({multiplieur = multiplieur; rank = 0}, multiplicande);
---  produit = red<<???;size>>(0^(2*size), matrice);
+
+-- R1:  C'est tout faux ce bidule. Je commente
+--  bidon, matrice = fillred<<PLC, size>>(
+--                                        Tacc_in{multiplieur = multiplieur; rank = 0}, 
+--
+--                                        multiplicande);
+  matrice = true^(2*size)^size;
+
 tel
 
 
diff --git a/src/test/should_work/lionel/calculs_max.lus b/src/test/should_work/lionel/calculs_max.lus
index 27fe7f8d..25eb6e9b 100644
--- a/src/test/should_work/lionel/calculs_max.lus
+++ b/src/test/should_work/lionel/calculs_max.lus
@@ -31,19 +31,19 @@ node max(strin : struct_max; ecourant : int)
 let
         strout = 
                         if (ecourant<=strin.max2)
-                        then {max1= strin.max1; 
+                        then struct_max{max1= strin.max1; 
                                   max2= strin.max2; 
                                   imax1= strin.imax1; 
                                   imax2= strin.imax2; 
                                   icourant= strin.icourant+1}
                         else  if ((ecourant>strin.max2) and (ecourant<=strin.max1))
-                                   then {max1= strin.max1; 
+                                   then struct_max{max1= strin.max1; 
                                                  max2= ecourant; 
                                                  imax1= strin.imax1; 
                                                  imax2= strin.icourant; 
                                                  icourant= strin.icourant+1}
                                    else --ecourant>max1
-                                              {max1= ecourant;
+                                              struct_max{max1= ecourant;
                                                    max2= strin.max1; 
                                                    imax1= strin.icourant;
                                                    imax2= strin.imax1; 
@@ -53,7 +53,7 @@ tel
 
 node fill_bool(s_in : struct_fill_bool) returns (s_out : struct_fill_bool ; elt : bool);
 let
-  s_out = {imax1= s_in.imax1; 
+  s_out = struct_fill_bool{imax1= s_in.imax1; 
   imax2= s_in.imax2; 
   icourant= s_in.icourant+1};
   elt = (s_in.icourant = s_in.imax1) or (s_in.icourant = s_in.imax2);
@@ -65,13 +65,13 @@ var
      local_struct: struct_max;
 	tmp: struct_fill_bool;
 let
-        local_struct = red<<max;taille>>({max1= 0; 
+        local_struct = red<<max;taille>>(struct_max{max1= 0; 
                                           max2= 0; 
                                           imax1= -1; 
                                           imax2= -1; 
                                           icourant= 0},
                                           A);
-        tmp, res = fill<<fill_bool;taille>>({imax1= local_struct.imax1; 
+        tmp, res = fill<<fill_bool;taille>>(struct_fill_bool{imax1= local_struct.imax1; 
                                 imax2= local_struct.imax2; 
                                 icourant= 0});
 tel
diff --git a/src/test/should_work/lionel/deSimone.lus b/src/test/should_work/lionel/deSimone.lus
index f677b55d..e859e9c9 100644
--- a/src/test/should_work/lionel/deSimone.lus
+++ b/src/test/should_work/lionel/deSimone.lus
@@ -23,7 +23,7 @@ node oneCell(accu_in : cell_accu;
 let
   ackout = (req and accu_in.token and accu_in.grant) and not (false -> pre(ackout));
   accu_out = 
-    {
+    cell_accu {
       token = accu_in.token;
       grant = not(req) and accu_in.grant
     };
@@ -35,7 +35,8 @@ node deSimone(new_token : bool ; request : tabType)
         returns (acknowledge : tabType);
 var accu_out : cell_accu;
 let
-        accu_out, acknowledge = fillred<<oneCell, size>>({token = new_token;
+        accu_out, acknowledge = fillred<<oneCell, size>>(cell_accu{
+                                                         token = new_token;
                                                          grant = true}, 
                                                          request);
 tel
diff --git a/src/test/should_work/lionel/moyenne.lus b/src/test/should_work/lionel/moyenne.lus
index 168c8995..4a73558e 100644
--- a/src/test/should_work/lionel/moyenne.lus
+++ b/src/test/should_work/lionel/moyenne.lus
@@ -8,13 +8,13 @@
 
 const size=10;
 
-type moyenne_accu = {sum :  real;
+type moyenne_accu = struct {sum :  real;
                      moyenne : real;
                      rank : real};
 
 node moyenne_step(accu_in : moyenne_accu; elt_in : real) returns (accu_out : moyenne_accu);
 let
-  accu_out = {
+  accu_out = moyenne_accu {
     sum = accu_in.sum + elt_in;
     moyenne = (accu_in.sum + elt_in)/(accu_in.rank+1.0);
     rank = accu_in.rank+1.0
@@ -30,7 +30,7 @@ node moyenne(Tab : real^size)
      returns (moy : real);
 var accu_out : moyenne_accu;
 let
-   accu_out = red<<moyenne_step, size>>({sum = 0.0;
+   accu_out = red<<moyenne_step, size>>( moyenne_accu  {sum = 0.0;
                                         moyenne = 0.0;
                                         rank = 0.0}, 
                                        Tab);
diff --git a/src/test/should_work/lionel/normal.lus b/src/test/should_work/lionel/normal.lus
index caf37e27..2c5430fe 100644
--- a/src/test/should_work/lionel/normal.lus
+++ b/src/test/should_work/lionel/normal.lus
@@ -113,7 +113,7 @@ tel
 node extract_info_chg_glob ( EntreeGlob : T_EntreeGlob)  
         returns (InfoChgGlob : T_InfoChgGlob);
 let
-        InfoChgGlob = {chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
+        InfoChgGlob = T_InfoChgGlob{chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
 tel
 
 
@@ -130,7 +130,7 @@ tel
 node int2InfoChgIndiv (m : int) 
         returns (InfoChgIndiv : T_InfoChgIndiv);
 let
-        InfoChgIndiv = { mesure_chg = m };
+        InfoChgIndiv = T_InfoChgIndiv { mesure_chg = m };
 tel
 
 node extract_tab_info_chg_indiv (EntreeGlob : T_EntreeGlob) 
@@ -152,7 +152,7 @@ tel
 node extract_info_gen_glob (EntreeGlob : T_EntreeGlob) 
         returns (InfoGenGlob : T_InfoGenGlob);
 let
-        InfoGenGlob = {elt_bidon = 0; chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
+        InfoGenGlob =  T_InfoGenGlob {elt_bidon = 0; chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
 tel
 
 
@@ -163,7 +163,7 @@ tel
 node int2InfoGenIndiv (m : int) 
         returns (InfoGenIndiv : T_InfoGenIndiv);
 let
-        InfoGenIndiv = {mesure_gen = m};
+        InfoGenIndiv = T_InfoGenIndiv{mesure_gen = m};
 tel
 
 node extract_tab_info_gen_indiv (EntreeGlob : T_EntreeGlob) 
diff --git a/src/test/should_work/lionel/testSilus.lus b/src/test/should_work/lionel/testSilus.lus
index ae7cad1f..e0727829 100644
--- a/src/test/should_work/lionel/testSilus.lus
+++ b/src/test/should_work/lionel/testSilus.lus
@@ -100,7 +100,7 @@ tel
 node extract_info_chg_glob (EntreeGlob : T_EntreeGlob)  
 	returns (InfoChgGlob : T_InfoChgGlob); -- OK
 let
-	InfoChgGlob = {chg2gen =  map<<id;NBC>>(EntreeGlob.chg2gen)};
+	InfoChgGlob = T_InfoChgGlob {chg2gen =  map<<id;NBC>>(EntreeGlob.chg2gen)};
 tel
 
 
@@ -117,7 +117,7 @@ tel
 node int2InfoChgIndiv (m : int) -- OK
 	returns (InfoChgIndiv : T_InfoChgIndiv);
 let
-	InfoChgIndiv = {mesure_chg = m};
+	InfoChgIndiv = T_InfoChgIndiv{mesure_chg = m};
 tel
 
 node extract_tab_info_chg_indiv (EntreeGlob : T_EntreeGlob) -- OK
@@ -139,8 +139,9 @@ tel
 node extract_info_gen_glob (EntreeGlob : T_EntreeGlob)  -- OK
 	returns (InfoGenGlob : T_InfoGenGlob);
 let
-	InfoGenGlob = {elt_bidon = 0;
-                   chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
+	InfoGenGlob = T_InfoGenGlob{
+                        elt_bidon = 0;
+                        chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
 tel
 
 
@@ -151,7 +152,7 @@ tel
 node int2InfoGenIndiv (m : int)   -- OK
 	returns (InfoGenIndiv : T_InfoGenIndiv);
 let
-	InfoGenIndiv = {mesure_gen = m};
+	InfoGenIndiv = T_InfoGenIndiv{mesure_gen = m};
 tel
 
 node extract_tab_info_gen_indiv (EntreeGlob : T_EntreeGlob)  -- OK
diff --git a/src/test/should_work/lionel/triSel.lus b/src/test/should_work/lionel/triSel.lus
index 2ad271f2..5e431672 100644
--- a/src/test/should_work/lionel/triSel.lus
+++ b/src/test/should_work/lionel/triSel.lus
@@ -56,7 +56,7 @@ var
         UnarySort_accu_out : Sort_accu;
 let
         UnarySort_accu_out = red<<UnarySort;size>>(
-                                { CurrentRank = 0;
+                                Sort_accu{ CurrentRank = 0;
                                            Tab = TIn},
                                 TIn);
         TSorted = UnarySort_accu_out.Tab;
@@ -88,7 +88,7 @@ var
 let
     --------------------------------------------------------------
     -- Find the minimum element (its rank and value) from the rank accu_in.CurrentRank
-        accu_out_min = red<<minFromRank;size>>( { MinVal = 0;          -- {0 :  value of the minimum in the begining of the iteration
+        accu_out_min = red<<minFromRank;size>>( MinFR_accu{ MinVal = 0;          -- 0 :  value of the minimum in the begining of the iteration
                                                             MinRank = 0;                                 --  0 :  rank of the minimum in the begining of the iteration
                                                             RankFrom = accu_in.CurrentRank;              --  accu_in.CurrentRank :  Rank we have to look from for finding the minimum
                                                             Rank = 0 },                                  --  0 : initialisation of the rank in the iteration
@@ -100,7 +100,7 @@ let
 
     --------------------------------------------------------------
     -- Select the current element in the array (of rank accu_in.CurrentRank)
-        accu_out_select = red<<select;size>>( { RankToFind = accu_in.CurrentRank;
+        accu_out_select = red<<select;size>>( Select_accu{ RankToFind = accu_in.CurrentRank;
                                                            CurrentRank = 0;
                                                            Val = 0 },
                                               accu_in.Tab);
@@ -111,7 +111,7 @@ let
     ------------------------------------------------------------------------
     -- Exchange the two elements 'current' and 'minimum from current rank'
         accu_out_exchange, localTab = fillred<<Exchange_i_j;size>>(
-                                         { MinVal = accu_out_min.MinVal;
+                                         Exchange_accu{ MinVal = accu_out_min.MinVal;
                                                         MinRank = accu_out_min.MinRank;
                                                         RankFrom = accu_out_select.RankToFind;
                                                         CurrentVal = accu_out_select.Val;
@@ -123,7 +123,7 @@ let
 
     -----------------------------------------------------------------------
     -- Update accumulator structure for next iteration
-        accu_out = { CurrentRank = accu_in.CurrentRank + 1; Tab = localTab };
+        accu_out = Sort_accu{ CurrentRank = accu_in.CurrentRank + 1; Tab = localTab };
     ----------------------------------------------------------------------
    
 tel
@@ -143,7 +143,7 @@ node minFromRank(accu_in : MinFR_accu; TabEltIn : int)
 let
 
 
-        accu_out = {
+        accu_out = MinFR_accu{
   -------------------------------------------------
   -- accu_out.MinVal : 
   MinVal = if ((accu_in.Rank=0) or (accu_in.Rank=accu_in.RankFrom)) then TabEltIn else
@@ -198,7 +198,7 @@ tel
 node Exchange_i_j(accu_in : Exchange_accu ; eltIn : int) 
         returns (accu_out : Exchange_accu ; eltOut : int);
 let
-        accu_out = { MinVal = accu_in.MinVal;
+        accu_out = Exchange_accu{ MinVal = accu_in.MinVal;
                                   MinRank = accu_in.MinRank;
                                   RankFrom = accu_in.RankFrom;
                                   CurrentVal = accu_in.CurrentVal;
@@ -225,7 +225,7 @@ tel
 node select(accu_in : Select_accu; elt : int) 
         returns (accu_out : Select_accu);
 let
-        accu_out = { RankToFind = accu_in.RankToFind;
+        accu_out = Select_accu{ RankToFind = accu_in.RankToFind;
                                 CurrentRank = accu_in.CurrentRank + 1;
                                 Val = if(accu_in.RankToFind=accu_in.CurrentRank)
                                       then elt
@@ -259,14 +259,14 @@ node Sorted(TIn : tabSize)
 var accu_out : sorted_iter_accu;
     TSorted : tabSize;
 let
-  TSorted = main(TIn);
-  accu_out = red<<sorted_iter;size>>({prev_elt = 0; prop_is_tt = true}, TSorted);
+  TSorted = triSel(TIn);
+  accu_out = red<<sorted_iter;size>>(sorted_iter_accu{prev_elt = 0; prop_is_tt = true}, TSorted);
   ok = accu_out.prop_is_tt;
 tel
 
 node sorted_iter(accu_in : sorted_iter_accu; elt : int)
      returns(accu_out : sorted_iter_accu);
 let
-  accu_out = { prev_elt = elt; 
+  accu_out = sorted_iter_accu{ prev_elt = elt; 
                                prop_is_tt = (accu_in.prev_elt <= elt) and (accu_in.prop_is_tt) };
 tel
\ No newline at end of file
diff --git a/src/test/should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus
index c6b0c78f..fd16e1c6 100644
--- a/src/test/should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus
+++ b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus
@@ -1,22 +1,35 @@
 const size=10;
 
 type elementType = int;
-type iteratedStruct = {currentRank : int; rankToSelect : int; elementSelected : elementType};
+type iteratedStruct = 
+  {
+     currentRank : int; 
+     rankToSelect : int; 
+     elementSelected : elementType
+};
 
 node selectEltInArray(array : elementType^size; rankToSelect : int) returns (elementSelected : elementType);
 var iterationResult : iteratedStruct;
 let
-  iterationResult = red<<selectOneStage, size>>({currentRank=0; rankToSelect=rankToSelect; elementSelected=0}, array);
+  iterationResult = red<<selectOneStage, size>>(
+     iteratedStruct{
+          currentRank=0; 
+          rankToSelect=rankToSelect; 
+          elementSelected=0}, 
+     array);
   elementSelected = iterationResult.elementSelected; 
 tel
 
 
 
-node selectOneStage(acc_in : elementType; currentElt : elementType) returns (acc_out : elementType);
+node selectOneStage(acc_in : iteratedStruct; currentElt : elementType) 
+returns (acc_out : iteratedStruct);
 let
-  acc_out = {currentRank = acc_in.currentRank+1;
-             rankToSelect = acc_in.rankToSelect;
-             elementSelected = if(acc_in.currentRank=acc_in.rankToSelect)
-                               then currentElt
-                               else acc_in.elementSelected};
+  acc_out = iteratedStruct{
+                   currentRank = acc_in.currentRank+1;
+                   rankToSelect = acc_in.rankToSelect;
+                   elementSelected = if(acc_in.currentRank=acc_in.rankToSelect)
+                                     then currentElt
+                                     else acc_in.elementSelected
+                   };
 tel
diff --git a/src/test/should_work/packEnvTest/contractForElementSelectionInArray/packageTableau.lus b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/packageTableau.lus
index 9f35e811..8d1c865a 100644
--- a/src/test/should_work/packEnvTest/contractForElementSelectionInArray/packageTableau.lus
+++ b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/packageTableau.lus
@@ -77,13 +77,13 @@ type T_isElementOf_ = {eltToSearch : elementType; iselementof : bool};
 node _isElementOf_(e : elementType; t : arrayType) returns (iselementof : bool);
 var acc_out : T_isElementOf_;
 let
-  acc_out = red<<iterated_isElementOf_, size>>({eltToSearch = e; iselementof = false}, t);
+  acc_out = red<<iterated_isElementOf_, size>>(T_isElementOf_{eltToSearch = e; iselementof = false}, t);
 tel
 
 
 node iterated_isElementOf_(acc_in : T_isElementOf_; elt_in : elementType) returns (acc_out : T_isElementOf_);
 let
-  acc_out = {eltToSearch = acc_in.eltToSearch;
+  acc_out = T_isElementOf_{eltToSearch = acc_in.eltToSearch;
              iselementof = acc_in or _isEqualTo_(acc_in.eltToSearch, elt_in)};
 tel
 
@@ -97,7 +97,7 @@ node selectElementOfRank_inArray_(rankToSelect : int;array : arrayType) returns
 %GUARANTEE:guaranteeSelectElementOfRank_inArray_%
 var iterationResult : iteratedStruct;
 let
-  iterationResult = red<<selectOneStage, size>>({currentRank = 0; rankToSelect = rankToSelect; elementSelected = array[0]}, array);
+  iterationResult = red<<selectOneStage, size>>(iteratedStruct{currentRank = 0; rankToSelect = rankToSelect; elementSelected = array[0]}, array);
   elementSelected = iterationResult.elementSelected; 
 tel
 
@@ -116,7 +116,7 @@ tel
 -- guarantee : acc_out.currentRank>acc_in.currentRank
 node selectOneStage(acc_in : iteratedStruct; currentElt : elementType) returns (acc_out : iteratedStruct);
 let
-  acc_out = {currentRank = acc_in.currentRank+1;
+  acc_out = iteratedStruct{currentRank = acc_in.currentRank+1;
              rankToSelect = acc_in.rankToSelect;
              elementSelected = if(acc_in.currentRank=acc_in.rankToSelect)
                                then currentElt
@@ -147,7 +147,7 @@ tel
 node getRank_ofMaximumIn_(array : arrayType) returns (rankOfMaximumElement : int);
 var local : currentRank_withMemorizedRank;
 let
-  local = red<<selectMaxRank, size>>({currentRank = 0; rankOfMemorizedVal = 0; memorizedVal = array[0]}, array);
+  local = red<<selectMaxRank, size>>(currentRank_withMemorizedRank{currentRank = 0; rankOfMemorizedVal = 0; memorizedVal = array[0]}, array);
   rankOfMaximumElement = local.rankOfMemorizedVal;
 tel
 
@@ -159,7 +159,7 @@ type currentRank_withMemorizedRank = {currentRank : int; rankOfMemorizedVal : in
 -- guarantee : acc_out.currentRank>acc_in.currentRank
 node selectMaxRank(acc_in : currentRank_withMemorizedRank; e1 : elementType) returns (acc_out : currentRank_withMemorizedRank);
 let
-  acc_out = {currentRank = acc_in.currentRank+1;
+  acc_out = currentRank_withMemorizedRank{currentRank = acc_in.currentRank+1;
              rankOfMemorizedVal = if(_isGreaterThan_(e1, acc_in.memorizedVal)) then acc_in.currentRank else acc_in.rankOfMemorizedVal;
              memorizedVal = if(_isGreaterThan_(e1, acc_in.memorizedVal)) then e1 else acc_in.memorizedVal};
 tel
@@ -189,7 +189,7 @@ node getRank_ofMinimumIn_(array : arrayType) returns (rankOfMinimumElement : int
 var minElement : elementType;
 let
   minElement = getMinimumIn_(array);
-  rankOfMinimumElement = red<<selectMinRank, size>>({currentRank = 0; rankOfMemorizedVal = 0; memorizedVal = minElement}, array).rankOfMemorizedVal;
+  rankOfMinimumElement = red<<selectMinRank, size>>(currentRank_withMemorizedRank{currentRank = 0; rankOfMemorizedVal = 0; memorizedVal = minElement}, array).rankOfMemorizedVal;
 tel
 
 
@@ -197,7 +197,7 @@ tel
 -- guarantee : acc_out.currentRank>acc_in.currentRank
 node selectMinRank(acc_in : currentRank_withMemorizedRank; elt : elementType) returns (acc_out : currentRank_withMemorizedRank);
 let
-  acc_out = {currentRank = acc_in.currentRank+1;
+  acc_out = currentRank_withMemorizedRank{currentRank = acc_in.currentRank+1;
              rankOfMemorizedVal = if(_isEqualTo_(acc_in.memorizedVal, elt)) then acc_in.currentRank else acc_in.rankOfMemorizedVal;
              memorizedVal = acc_in.memorizedVal};
 tel
@@ -209,13 +209,13 @@ type forSortingAlgo =  {previousElement : elementType; sortedUpToHere : bool};
 node _isLoselySorted(array : arrayType) returns (array_isLoselySorted : bool);
 var result : forSortingAlgo;
 let 
-  result = red<<isLocallyLoselySorted, size>>({previousElement = array[0]; sortedUpToHere = true}, array);
+  result = red<<isLocallyLoselySorted, size>>(forSortingAlgo{previousElement = array[0]; sortedUpToHere = true}, array);
   array_isLoselySorted = result.sortedUpToHere;
 tel
 
 node isLocallyLoselySorted(acc_in : forSortingAlgo; elt : elementType) returns (acc_out : forSortingAlgo);
 let
-  acc_out = {previousElement = elt; 
+  acc_out = forSortingAlgo{previousElement = elt; 
              sortedUpToHere = _isGreaterOrEqualTo_(elt, acc_in.previousElement) and acc_in.sortedUpToHere};
 tel
 
@@ -228,9 +228,9 @@ var
 	UnarySort_accu_out : Sort_accu;
 let
 	UnarySort_accu_out = red<<UnarySort, size>>(
-                              {CurrentRank = 0;
-							            Tab = array}, -- Values given for test
-							  array);	-- same
+                                             Sort_accu{CurrentRank = 0;
+                                             Tab = array}, -- Values given for test
+                                             array);	-- same
 	arraySorted = UnarySort_accu_out.Tab;
 tel
 
@@ -272,7 +272,7 @@ var
 -- localTab : tableau calculé (trié un cran plus loin)
 let
   -- je commence par trouver le minimum à partir de accu_in.CurrentRank
-  accu_out_min = red<<minFromRank, size>>({MinVal = 0; 
+  accu_out_min = red<<minFromRank, size>>(Sort_accu{MinVal = 0; 
                                          MinRank = accu_in.CurrentRank;
                                          RankFrom = accu_in.CurrentRank;
                                          Rank = 0}; 
@@ -280,20 +280,20 @@ let
 
   -- ensuite, je trouve la valeur du rang courant (rang où j'en suis 
   -- de l'itération de UnarySort
-  accu_out_select = red<<select, size>>({RankToFind = accu_in.CurrentRank;
+  accu_out_select = red<<select, size>>(Select_accu{RankToFind = accu_in.CurrentRank;
                                        CurrentRank = 0;
                                        Val = 0};
                                        accu_in.Tab);
 
   -- puis j'échange le minimum trouvé et l'élement de rang courant
   --    (courant dans l'itération de UnarySort)
-  accu_out_exchange, localTab = map_red<<Exchange_i_j, size>>({MinVal = accu_out_min.MinVal;
+  accu_out_exchange, localTab = map_red<<Exchange_i_j, size>>(Exchange_accu{MinVal = accu_out_min.MinVal;
                                                              MinRank = accu_out_min.MinRank;
                                                              RankFrom = accu_out_select.RankToFind;
                                                              CurrentVal = accu_out_select.Val;
                                                              Rank = 0},
                                                              accu_in.Tab);
-  accu_out = {CurrentRank = accu_in.CurrentRank + 1,
+  accu_out = Sort_accu{CurrentRank = accu_in.CurrentRank + 1,
                        Tab = localTab};
 tel
 
@@ -304,7 +304,7 @@ tel
 node minFromRank(accu_in : MinFR_accu; TabEltIn : elementType)
 	returns (accu_out : MinFR_accu);
 let
-  accu_out = {MinVal = if (accu_in.Rank<=accu_in.RankFrom) 
+  accu_out = MinFR_accu{MinVal = if (accu_in.Rank<=accu_in.RankFrom) 
                                  then TabEltIn
                                  else
                                    if (accu_in.Rank>=accu_in.RankFrom)    
@@ -341,7 +341,7 @@ tel
 node Exchange_i_j(accu_in : Exchange_accu ; eltIn : elementType) 
 	returns (accu_out : Exchange_accu ; eltOut : elementType);
 let
-	accu_out = {MinVal = accu_in.MinVal;
+	accu_out = Exchange_accu{MinVal = accu_in.MinVal;
 				             MinRank = accu_in.MinRank;
 				             RankFrom = accu_in.RankFrom;
 				             CurrentVal = accu_in.CurrentVal;
@@ -360,7 +360,7 @@ tel
 node select(accu_in : Select_accu; elt : elementType) 
 	returns (accu_out : Select_accu);
 let
-	accu_out = {RankToFind = accu_in.RankToFind;
+	accu_out = Select_accu{ RankToFind = accu_in.RankToFind;
 				CurrentRank = accu_in.CurrentRank + 1;
 				Val =  if(accu_in.RankToFind=accu_in.CurrentRank)
 					  then elt
diff --git a/src/test/test.res.exp b/src/test/test.res.exp
index 785a1650..22bab6db 100644
--- a/src/test/test.res.exp
+++ b/src/test/test.res.exp
@@ -2143,14 +2143,14 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package dependeur_struct
 	Exported types:
-type dependeur_struct__time =  {h : int; m : int; s : int; ms : int};
+type dependeur_struct__time = dependeur_struct::time {h : int; m : int; s : int; ms : int};
 	Exported constants:
 	Exported nodes:
 
 node dependeur_struct__dependeur_struct(
 	time_in_ms:int) 
 returns (
-	theTime: {h : int;
+	theTime:dependeur_struct::time {h : int;
 	m : int;
 	s : int;
 	ms : int});
@@ -2345,15 +2345,15 @@ End of Syntax table dump. 
 	Exported types:
 type ex__t = int^1^2^3^4;
 type ex__t1 = int^1^2^3^4^4;
-type ex__t2 =  {a : int; b : bool^11^22};
-type ex__s1 =  {x : int; y : int^1^2^3^4};
-type ex__s =  {x : int^1^2^3^4; y :  {x : int; y : int^1^2^3^4}};
+type ex__t2 = ex::t2 {a : int; b : bool^11^22};
+type ex__s1 = ex::s1 {x : int; y : int^1^2^3^4};
+type ex__s = ex::s {x : int^1^2^3^4; y : ex::s1 {x : int; y : int^1^2^3^4}};
 	Exported constants:
 	Exported nodes:
 
 node ex__ex(
-	a: {x : int^1^2^3^4;
-	y :  {x : int;
+	a:ex::s {x : int^1^2^3^4;
+	y : ex::s1 {x : int;
 	y : int^1^2^3^4}}) 
 returns (
 	b:int);
@@ -2519,10 +2519,10 @@ type hanane__t1;
 const hanane__a = 4;
 type hanane__string = int^4;
 type hanane__string2d = int^4^4;
-type hanane__structT =  {x : int; y : real; z : int^4^4^4};
+type hanane__structT = hanane::structT {x : int; y : real; z : int^4^4^4};
 type hanane__t2;
 type hanane__t3;
-type hanane__tabStruct =  {x : int; y : real; z : int^4^4^4}^2;
+type hanane__tabStruct = hanane::structT {x : int; y : real; z : int^4^4^4}^2;
 	Exported constants:
 const hanane__b = true;
 const hanane__c = 3.140000;
@@ -2531,14 +2531,14 @@ const hanane__c = 3.140000;
 node hanane__hanane(
 	a1:bool;
 	b1:int^4^4;
-	c1: {x : int;
+	c1:hanane::structT {x : int;
 	y : real;
 	z : int^4^4^4}^2) 
 returns (
 	res:bool);
 var
    h1:int^4;
-   h2: {x : int; y : real; z : int^4^4^4}^2;
+   h2:hanane::structT {x : int; y : real; z : int^4^4^4}^2;
    h3:int;
    h4:real;
    h5:int^4^4^4;
@@ -3092,8 +3092,8 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package mm
 	Exported types:
-type mm__pair =  {a : int; b : int};
-type mm__pairpair =  {a :  {a : int; b : int}; b :  {a : int; b : int}};
+type mm__pair = mm::pair {a : int; b : int};
+type mm__pairpair = mm::pairpair {a : mm::pair {a : int; b : int}; b : mm::pair {a : int; b : int}};
 	Exported constants:
 	Exported nodes:
 node mm__mm(a:int; b:int) returns (min:int; max:int);
@@ -3126,11 +3126,11 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package mm1
 	Exported types:
-type mm1__pair =  {a : int; b : int};
-type mm1__pairpair =  {a :  {a : int; b : int}; b :  {a : int; b : int}};
+type mm1__pair = mm1::pair {a : int; b : int};
+type mm1__pairpair = mm1::pairpair {a : mm1::pair {a : int; b : int}; b : mm1::pair {a : int; b : int}};
 	Exported constants:
 	Exported nodes:
-node mm1__mm1(a:int; b:int) returns (y: {a : int; b : int});
+node mm1__mm1(a:int; b:int) returns (y:mm1::pair {a : int; b : int});
 let
    (y., y.) =  if ((a > b)) then ((b, a)) else ((a, b));
 tel
@@ -3160,11 +3160,11 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package mm22
 	Exported types:
-type mm22__pair =  {a : int; b : int};
-type mm22__pairpair =  {a :  {a : int; b : int}; b :  {a : int; b : int}};
+type mm22__pair = mm22::pair {a : int; b : int};
+type mm22__pairpair = mm22::pairpair {a : mm22::pair {a : int; b : int}; b : mm22::pair {a : int; b : int}};
 	Exported constants:
 	Exported nodes:
-node mm22__mm22(a:int; b:int) returns (y: {a : int; b : int});
+node mm22__mm22(a:int; b:int) returns (y:mm22::pair {a : int; b : int});
 let
    y. =  if ((a > b)) then (b) else (a);
    y. =  if ((a > b)) then (a) else (b);
@@ -3195,11 +3195,17 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package mm3
 	Exported types:
-type mm3__pair =  {a : int; b : int};
-type mm3__pairpair =  {a :  {a : int; b : int}; b :  {a : int; b : int}};
+type mm3__pair = mm3::pair {a : int; b : int};
+type mm3__pairpair = mm3::pairpair {a : mm3::pair {a : int; b : int}; b : mm3::pair {a : int; b : int}};
 	Exported constants:
 	Exported nodes:
-node mm3__mm3(a: {a : int; b : int}) returns (y: {a : int; b : int});
+
+node mm3__mm3(
+	a:mm3::pair {a : int;
+	b : int}) 
+returns (
+	y:mm3::pair {a : int;
+	b : int});
 let
    (y., y.) =  if ((a.a > a.b)) then ((a.b, a.a)) else ((a.a, a.b));
 tel
@@ -4547,9 +4553,9 @@ End of Syntax table dump. 
 	Exported types:
 type simple__S;
 type simple__T = int;
-type simple__H =  {x : simple__S; y : int};
-type simple__U =  {a : int; b :  {x : simple__S; y : int}};
-type simple__V =  {a : int; b :  {x : simple__S; y : int}}^4;
+type simple__H = simple::H {x : simple__S; y : int};
+type simple__U = simple::U {a : int; b : simple::H {x : simple__S; y : int}};
+type simple__V = simple::U {a : int; b : simple::H {x : simple__S; y : int}}^4;
 const simple__size = 16;
 type simple__W = int^18;
 	Exported constants:
@@ -4561,8 +4567,8 @@ const simple__c = true;
 
 node simple__simple(
 	e:bool;
-	a: {a : int;
-	b :  {x : simple__S;
+	a:simple::U {a : int;
+	b : simple::H {x : simple__S;
 	y : int}}) 
 returns (
 	b:int);
@@ -5123,10 +5129,10 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package left
 	Exported types:
-type left__truc =  {a : bool^100; b : int};
+type left__truc = left::truc {a : bool^100; b : int};
 	Exported constants:
 	Exported nodes:
-node left__toto(x:bool) returns (t: {a : bool^100; b : int}^3);
+node left__toto(x:bool) returns (t:left::truc {a : bool^100; b : int}^3);
 let
    t[0].[0..98 step 2][48..0 step -2] = bool^25;
    t[0].[0..98 step 2][1..49 step 2] = bool^25;
@@ -5134,7 +5140,7 @@ let
    t[0].[1..99 step 2][1] = true;
    t[0].[5..99 step 2] = bool^48;
    t[0]. = 42;
-   t[1..2] =  {a : bool^100; b : int}^2;
+   t[1..2] = left::truc {a : bool^100; b : int}^2;
 tel
 -- end of node left__toto
 
@@ -5214,12 +5220,38 @@ tel
 	Exported types:
 	Exported constants:
 	Exported nodes:
-type inter__selType =  {i : int; b : bool; r : real};
+type inter__selType = inter::selType {i : int; b : bool; r : real};
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
-
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/Pascal/newpacks.lus
+node inter__preced(
+	in:inter::selType {i : int;
+	b : bool;
+	r : real}) 
+returns (
+	out:inter::selType {i : int;
+	b : bool;
+	r : real};
+	out2:inter::selType {i : int;
+	b : bool;
+	r : real});
+let
+   out2 = selType{i=0;b=true;r=.0};
+   out. = pint__fby1(out2.i, in.i);
+   out. = pbool__fby1(out2.b, in.b);
+   out. = preal__fby1(out2.r, in.r);
+tel
+-- end of node inter__preced
+node mainPack__preced(in:inter__selType) returns (out:inter__selType);
+var
+   out2:inter__selType;
+let
+   (out, out2) = inter__preced(in);
+tel
+-- end of node mainPack__preced
+ * package inter
+	Exported types:
+	Exported constants:
+const inter__n = -4;
+	Exported nodes:
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/Pascal/onlyroll.lus
@@ -5855,12 +5887,38 @@ tel
 	Exported types:
 	Exported constants:
 	Exported nodes:
-type inter__selType =  {i : int; b : bool; r : real};
-
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+type inter__selType = inter::selType {i : int; b : bool; r : real};
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/Pascal/p.lus
+node inter__preced(
+	in:inter::selType {i : int;
+	b : bool;
+	r : real}) 
+returns (
+	out:inter::selType {i : int;
+	b : bool;
+	r : real};
+	out2:inter::selType {i : int;
+	b : bool;
+	r : real});
+let
+   out2 = selType{i=0;b=true;r=.0};
+   out. = pint__fby1(out2.i, in.i);
+   out. = pbool__fby1(out2.b, in.b);
+   out. = preal__fby1(out2.r, in.r);
+tel
+-- end of node inter__preced
+node mainPack__preced(in:inter__selType) returns (out:inter__selType);
+var
+   out2:inter__selType;
+let
+   (out, out2) = inter__preced(in);
+tel
+-- end of node mainPack__preced
+ * package inter
+	Exported types:
+	Exported constants:
+const inter__n = -4;
+	Exported nodes:
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/Pascal/packs.lus
@@ -5897,10 +5955,17 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package struct0
 	Exported types:
-type struct0__Toto =  {x : int (1); y : int (2)};
+type struct0__Toto = struct0::Toto {x : int (1); y : int (2)};
 	Exported constants:
 	Exported nodes:
-node struct0__bibi(dummy:int) returns (z: {x : int (1); y : int (2)});
+
+node struct0__bibi(
+	dummy:int) 
+returns (
+	z:struct0::Toto {x : int (
+	1);
+	y : int (
+	2)});
 let
    z = Toto{x=3};
 tel
@@ -6656,8 +6721,8 @@ type decl__t4 = decl__t1^8;
 const decl__d = true;
 const decl__h = 2;
 type decl__t5 = decl__t1^8^5;
-type decl__coord =  {x : real; y : real};
-type decl__coord_tab =  {x : real; y : real}^1;
+type decl__coord = decl::coord {x : real; y : real};
+type decl__coord_tab = decl::coord {x : real; y : real}^1;
 type decl__couleur = enum {decl__bleu, decl__blanc, decl__rouge};
 	Exported constants:
 const decl__e = 8.500000;
@@ -6746,8 +6811,8 @@ type declaration__t4 = declaration__t1^8;
 const declaration__d = true;
 const declaration__h = 2;
 type declaration__t5 = declaration__t1^8^5;
-type declaration__coord =  {x : real; y : real};
-type declaration__coord_tab =  {x : real; y : real}^1;
+type declaration__coord = declaration::coord {x : real; y : real};
+type declaration__coord_tab = declaration::coord {x : real; y : real}^1;
 type declaration__couleur = enum {declaration__bleu, declaration__blanc, declaration__rouge};
 	Exported constants:
 const declaration__e = 8.500000;
@@ -6839,10 +6904,10 @@ type def__t1;
 const def__a = 4;
 type def__string = int^4;
 type def__string2d = int^4^4;
-type def__structT =  {x : int; y : real; z : int^4^4^4};
+type def__structT = def::structT {x : int; y : real; z : int^4^4^4};
 type def__t2;
 type def__t3;
-type def__tabStruct =  {x : int; y : real; z : int^4^4^4}^2;
+type def__tabStruct = def::structT {x : int; y : real; z : int^4^4^4}^2;
 	Exported constants:
 const def__id_int = 5;
 const def__b = true;
@@ -6852,7 +6917,7 @@ const def__c = 3.140000;
 node def__def(
 	a1:bool;
 	b1:int^4^4;
-	c1: {x : int;
+	c1:def::structT {x : int;
 	y : real;
 	z : int^4^4^4}^2;
 	d1:int^23) 
@@ -6860,7 +6925,7 @@ returns (
 	res:bool);
 var
    h1:int^4;
-   h2: {x : int; y : real; z : int^4^4^4}^2;
+   h2:def::structT {x : int; y : real; z : int^4^4^4}^2;
    h3:int;
    h4:real;
    h5:int^4^4^4;
@@ -6982,14 +7047,14 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package filter
 	Exported types:
-type filter__complexe =  {x : real; y : real};
-type filter__cdouble =  {x :  {x : real; y : real}; y :  {x : real; y : real}};
+type filter__complexe = filter::complexe {x : real; y : real};
+type filter__cdouble = filter::cdouble {x : filter::complexe {x : real; y : real}; y : filter::complexe {x : real; y : real}};
 	Exported constants:
 	Exported nodes:
 node filter__filter(a:real; b:real) returns (ok:bool);
 var
    i:real;
-   z: {x :  {x : real; y : real}; y :  {x : real; y : real}};
+   z:filter::cdouble {x : filter::complexe {x : real; y : real}; y : filter::complexe {x : real; y : real}};
 let
    z.. = 0. -> i;
    z.. = z.x.x;
@@ -7129,13 +7194,13 @@ const map_red_iter__NBC = 20;
 type map_red_iter__INTNBC = int^20;
 const map_red_iter__NBG = 4;
 type map_red_iter__INTNBG = int^4;
-type map_red_iter__T_EntreeGlob =  {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4};
+type map_red_iter__T_EntreeGlob = map_red_iter::T_EntreeGlob {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4};
 type map_red_iter__T_ComChg = int;
-type map_red_iter__T_InfoGenIndiv =  {mesure_gen : int};
+type map_red_iter__T_InfoGenIndiv = map_red_iter::T_InfoGenIndiv {mesure_gen : int};
 type map_red_iter__T_EtatCharge = int;
-type map_red_iter__T_InfoChgGlob =  {chg2gen : int^20};
-type map_red_iter__T_InfoChgIndiv =  {mesure_chg : int};
-type map_red_iter__T_InfoGenGlob =  {elt_bidon : int; chg2gen : int^20};
+type map_red_iter__T_InfoChgGlob = map_red_iter::T_InfoChgGlob {chg2gen : int^20};
+type map_red_iter__T_InfoChgIndiv = map_red_iter::T_InfoChgIndiv {mesure_chg : int};
+type map_red_iter__T_InfoGenGlob = map_red_iter::T_InfoGenGlob {elt_bidon : int; chg2gen : int^20};
 	Exported constants:
 	Exported nodes:
 
@@ -7154,8 +7219,8 @@ tel
 
 node map_red_iter__map_red_iter(
 	indice_gen:int;
-	InfoGenIndiv: {mesure_gen : int};
-	InfoGenGlob: {elt_bidon : int;
+	InfoGenIndiv:map_red_iter::T_InfoGenIndiv {mesure_gen : int};
+	InfoGenGlob:map_red_iter::T_InfoGenGlob {elt_bidon : int;
 	chg2gen : int^20};
 	TabEtatCharge:int^20;
 	TabComVal:bool^20) 
@@ -8262,19 +8327,62 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package morel4
 	Exported types:
-type morel4__tube =  {in : int; out : int};
-type morel4__toto =  {titi :  {in : int; out : int}; tutu : bool};
+type morel4__tube = morel4::tube {in : int; out : int};
+type morel4__toto = morel4::toto {titi : morel4::tube {in : int; out : int}; tutu : bool};
 type morel4__arrayb = bool^3;
 type morel4__arrayi = int^2^3;
 	Exported constants:
 	Exported nodes:
+node morel4__mcmorel(i:int) returns (t:int^2);
+var
+   yo:morel4::toto {titi : morel4::tube {in : int; out : int}; tutu : bool};
+let
+   yo. = tube{in=i;out=(i + 1)};
+   yo. = true;
+   t = [yo.titi.in, yo.titi.out] -> [(pre(t[0]) + 1), pre(t[1])];
+tel
+-- end of node morel4__mcmorel
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
-Warning. in file "should_work/fab_test/morel4.lus", line 33, col 17 to 17, token ',':
----> separator mismatch, ';' expected
+node morel4__tab(
+	b:bool;
+	i:int) 
+returns (
+	b1:bool;
+	b2:bool;
+	b3:bool;
+	i1:int;
+	i2:int;
+	i3:int);
+var
+   tabb:bool^3;
+   tabi:int^2^3;
+let
+   (b1, b2, b3) = (tabb[0], tabb[1], tabb[2]);
+    (i1, i2, i3) = ((tabi[0][0] + tabi[0][1]), (tabi[1][0] + tabi[1][1]),
+	 (tabi[2][0] + tabi[2][1]));
+   tabb[0] = b;
+   tabb[1..2] = [true, false];
+   tabi[2] = morel4__mcmorel(i);
+   tabi[0..1] = [[10, 100], [1000, 10000]];
+tel
+-- end of node morel4__tab
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/fab_test/morel4.lus
+node morel4__morel4(
+	b:bool;
+	i:int) 
+returns (
+	b1:bool;
+	b2:bool;
+	b3:bool;
+	i1:int;
+	i2:int;
+	i3:int);
+let
+   (b1, b2, b3, i1, i2, i3) = morel4__tab(b, i);
+tel
+-- end of node morel4__morel4
+Warning. in file "should_work/fab_test/morel4.lus", line 33, col 22 to 22, token ',':
+---> separator mismatch, ';' expected
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/fab_test/morel5.lus
@@ -8304,15 +8412,15 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package morel5
 	Exported types:
-type morel5__tube =  {in : int; out : int};
-type morel5__toto =  {titi :  {in : int; out : int}; tutu : bool};
+type morel5__tube = morel5::tube {in : int; out : int};
+type morel5__toto = morel5::toto {titi : morel5::tube {in : int; out : int}; tutu : bool};
 type morel5__arrayb = bool^3;
 type morel5__arrayi = int^2^3;
 	Exported constants:
 	Exported nodes:
 
 node morel5__tab(
-	yo: {titi :  {in : int;
+	yo:morel5::toto {titi : morel5::tube {in : int;
 	out : int};
 	tutu : bool};
 	tabb:bool^3;
@@ -8332,7 +8440,7 @@ tel
 -- end of node morel5__tab
 
 node morel5__morel5(
-	t: {titi :  {in : int;
+	t:morel5::toto {titi : morel5::tube {in : int;
 	out : int};
 	tutu : bool};
 	b:bool^3;
@@ -8348,11 +8456,16 @@ let
    (b1, b2, b3, i1, i2, i3) = morel5__tab(t, b, i);
 tel
 -- end of node morel5__morel5
-
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
-
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/fab_test/morel5.lus
+node morel5__mcmorel(i:int) returns (t:int^2; u:int^2^2);
+var
+   yo:morel5::toto {titi : morel5::tube {in : int; out : int}; tutu : bool};
+let
+   yo. = tube{in=i;out=(i + 1)};
+   yo. = true;
+   t = [yo.titi.in, yo.titi.out] -> [(pre(t[0]) + 1), pre(t[1])];
+   u = [[10, 100], [1000, 10000]];
+tel
+-- end of node morel5__mcmorel
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/fab_test/noAlarm.lus
@@ -9856,18 +9969,130 @@ End of Syntax table dump. 
  * package produitBool
 	Exported types:
 const produitBool__size = 10;
-type produitBool__Tacc_in =  {multiplieur : bool^10; rank : int};
-type produitBool__T_isElementOf_ =  {eltToSearch : bool; iselementof : bool};
-type produitBool__iteratedStruct =  {currentRank : int; rankToSelect : int; elementSelected : bool};
-type produitBool__Tacc_inShift2 =  {multiplieur : bool^10; rank : int; actual_rank : int};
-type produitBool__Tacc_inShift =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int};
+type produitBool__Tacc_in = produitBool::Tacc_in {multiplieur : bool^10; rank : int};
+type produitBool__T_isElementOf_ = produitBool::T_isElementOf_ {eltToSearch : bool; iselementof : bool};
+type produitBool__iteratedStruct = produitBool::iteratedStruct {currentRank : int; rankToSelect : int; elementSelected : bool};
+type produitBool__Tacc_inShift2 = produitBool::Tacc_inShift2 {multiplieur : bool^10; rank : int; actual_rank : int};
+type produitBool__Tacc_inShift = produitBool::Tacc_inShift {acc_in_PLC : produitBool::Tacc_in {multiplieur : bool^10; rank : int}; actual_rank : int};
 	Exported constants:
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+node produitBool__iterated_isElementOf_(
+	acc_in:produitBool::T_isElementOf_ {eltToSearch : bool;
+	iselementof : bool};
+	elt_in:bool) 
+returns (
+	acc_out:produitBool::T_isElementOf_ {eltToSearch : bool;
+	iselementof : bool});
+let
+    acc_out =
+	T_isElementOf_{eltToSearch=acc_in.eltToSearch;iselementof=(acc_in.iselementof
+	 or (acc_in.eltToSearch = elt_in))};
+tel
+-- end of node produitBool__iterated_isElementOf_
+
+node produitBool___isElementOf_(
+	e:bool;
+	t:bool^10) 
+returns (
+	iselementof:bool);
+var
+   acc_out:produitBool::T_isElementOf_ {eltToSearch : bool; iselementof : bool};
+let
+    acc_out = red<<node produitBool__iterated_isElementOf_, const
+	 10>>(T_isElementOf_{eltToSearch=e;iselementof=false}, t);
+   iselementof = acc_out.iselementof;
+tel
+-- end of node produitBool___isElementOf_
+
+node produitBool__selectOneStage(
+	acc_in:produitBool::iteratedStruct {currentRank : int;
+	rankToSelect : int;
+	elementSelected : bool};
+	currentElt:bool) 
+returns (
+	acc_out:produitBool::iteratedStruct {currentRank : int;
+	rankToSelect : int;
+	elementSelected : bool});
+let
+    acc_out = iteratedStruct{currentRank=(acc_in.currentRank +
+	1);rankToSelect=acc_in.rankToSelect;elementSelected= if
+	((acc_in.currentRank = acc_in.rankToSelect)) then (currentElt) else
+	 (acc_in.elementSelected)};
+tel
+-- end of node produitBool__selectOneStage
+
+node produitBool__selectElementOfRank_inArray_(
+	rankToSelect:int;
+	array:bool^10) 
+returns (
+	elementSelected:bool);
+var
+   iterationResult:produitBool::iteratedStruct {currentRank : int; rankToSelect : int; elementSelected : bool};
+let
+    iterationResult = red<<node produitBool__selectOneStage, const
+	10>>(iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=array[0]},
+	 array);
+   elementSelected = iterationResult.elementSelected;
+tel
+-- end of node produitBool__selectElementOfRank_inArray_
+
+node produitBool__shiftFill(
+	acc_in:produitBool::Tacc_inShift2 {multiplieur : bool^10;
+	rank : int;
+	actual_rank : int}) 
+returns (
+	acc_out:produitBool::Tacc_inShift2 {multiplieur : bool^10;
+	rank : int;
+	actual_rank : int};
+	elt_out:bool);
+let
+    acc_out =
+	Tacc_inShift2{multiplieur=acc_in.multiplieur;rank=acc_in.rank;actual_rank=(acc_in.actual_rank
+	 + 1)};
+    elt_out =  if (((acc_in.actual_rank >= acc_in.rank) and
+	(acc_in.actual_rank < (acc_in.rank + size)))) then
+	(produitBool__selectElementOfRank_inArray_((acc_in.actual_rank -
+	 acc_in.rank), acc_in.multiplieur)) else (false);
+tel
+-- end of node produitBool__shiftFill
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/ProduitBool/produitBool.lus
+node produitBool__shift(
+	acc_in:produitBool::Tacc_in {multiplieur : bool^10;
+	rank : int}) 
+returns (
+	ligne:bool^20);
+var
+   bidon:produitBool::Tacc_inShift2 {multiplieur : bool^10; rank : int; actual_rank : int};
+let
+    (bidon, ligne) = fill<<node produitBool__shiftFill, const
+	 20>>(Tacc_inShift2{multiplieur=acc_in.multiplieur;rank=acc_in.rank;actual_rank=0});
+tel
+-- end of node produitBool__shift
+
+node produitBool__produitBool(
+	multiplicande:bool^10;
+	multiplieur:bool^10) 
+returns (
+	matrice:bool^20^10);
+let
+   matrice = bool^20^10;
+tel
+-- end of node produitBool__produitBool
+
+node produitBool__PLC(
+	acc_in:produitBool::Tacc_in {multiplieur : bool^10;
+	rank : int};
+	multiplicande:bool) 
+returns (
+	acc_out:produitBool::Tacc_in {multiplieur : bool^10;
+	rank : int};
+	ligne:bool^20);
+let
+    ligne =  if ((multiplicande = false)) then (bool^20) else
+	 (produitBool__shift(acc_in));
+tel
+-- end of node produitBool__PLC
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/ProduitBool/shiftFill_ludic.lus
@@ -9906,27 +10131,27 @@ End of Syntax table dump. 
  * package shiftFill_ludic
 	Exported types:
 type shiftFill_ludic__T1_ARRAY = bool^10;
-type shiftFill_ludic__T4_STRUCT =  {multiplieur : bool^10; rank : int};
-type shiftFill_ludic__T6_STRUCT =  {eltToSearch : bool; iselementof : bool};
-type shiftFill_ludic__T5_STRUCT =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int};
-type shiftFill_ludic__t_Tacc_inShift =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int};
-type shiftFill_ludic__t_T_isElementOf_ =  {eltToSearch : bool; iselementof : bool};
-type shiftFill_ludic__T2_STRUCT =  {multiplieur : bool^10; rank : int; actual_rank : int};
-type shiftFill_ludic__t_Tacc_in =  {multiplieur : bool^10; rank : int};
-type shiftFill_ludic__t_Tacc_inShift2 =  {multiplieur : bool^10; rank : int; actual_rank : int};
-type shiftFill_ludic__T3_STRUCT =  {currentRank : int; rankToSelect : int; elementSelected : bool};
-type shiftFill_ludic__t_iteratedStruct =  {currentRank : int; rankToSelect : int; elementSelected : bool};
+type shiftFill_ludic__T4_STRUCT = shiftFill_ludic::T4_STRUCT {multiplieur : bool^10; rank : int};
+type shiftFill_ludic__T6_STRUCT = shiftFill_ludic::T6_STRUCT {eltToSearch : bool; iselementof : bool};
+type shiftFill_ludic__T5_STRUCT = shiftFill_ludic::T5_STRUCT {acc_in_PLC : shiftFill_ludic::T4_STRUCT {multiplieur : bool^10; rank : int}; actual_rank : int};
+type shiftFill_ludic__t_Tacc_inShift = shiftFill_ludic::T5_STRUCT {acc_in_PLC : shiftFill_ludic::T4_STRUCT {multiplieur : bool^10; rank : int}; actual_rank : int};
+type shiftFill_ludic__t_T_isElementOf_ = shiftFill_ludic::T6_STRUCT {eltToSearch : bool; iselementof : bool};
+type shiftFill_ludic__T2_STRUCT = shiftFill_ludic::T2_STRUCT {multiplieur : bool^10; rank : int; actual_rank : int};
+type shiftFill_ludic__t_Tacc_in = shiftFill_ludic::T4_STRUCT {multiplieur : bool^10; rank : int};
+type shiftFill_ludic__t_Tacc_inShift2 = shiftFill_ludic::T2_STRUCT {multiplieur : bool^10; rank : int; actual_rank : int};
+type shiftFill_ludic__T3_STRUCT = shiftFill_ludic::T3_STRUCT {currentRank : int; rankToSelect : int; elementSelected : bool};
+type shiftFill_ludic__t_iteratedStruct = shiftFill_ludic::T3_STRUCT {currentRank : int; rankToSelect : int; elementSelected : bool};
 	Exported constants:
 const shiftFill_ludic__c_size = 10;
 	Exported nodes:
 
 node shiftFill_ludic__n_selectOneStage(
-	i_acc_in: {currentRank : int;
+	i_acc_in:shiftFill_ludic::T3_STRUCT {currentRank : int;
 	rankToSelect : int;
 	elementSelected : bool};
 	i_currentElt:bool) 
 returns (
-	o_acc_out: {currentRank : int;
+	o_acc_out:shiftFill_ludic::T3_STRUCT {currentRank : int;
 	rankToSelect : int;
 	elementSelected : bool});
 let
@@ -9943,7 +10168,7 @@ node shiftFill_ludic__n_selectElementOfRank_inArray_(
 returns (
 	o_elementSelected:bool);
 var
-   v_iterationResult: {currentRank : int; rankToSelect : int; elementSelected : bool};
+   v_iterationResult:shiftFill_ludic::T3_STRUCT {currentRank : int; rankToSelect : int; elementSelected : bool};
 let
     v_iterationResult = red<<node shiftFill_ludic__n_selectOneStage, const
 	10>>(T3_STRUCT{currentRank=0;rankToSelect=i_rankToSelect;elementSelected=i_array[0]},
@@ -9953,11 +10178,11 @@ tel
 -- end of node shiftFill_ludic__n_selectElementOfRank_inArray_
 
 node shiftFill_ludic__n_shiftFill(
-	i_acc_in: {multiplieur : bool^10;
+	i_acc_in:shiftFill_ludic::T2_STRUCT {multiplieur : bool^10;
 	rank : int;
 	actual_rank : int}) 
 returns (
-	o_acc_out: {multiplieur : bool^10;
+	o_acc_out:shiftFill_ludic::T2_STRUCT {multiplieur : bool^10;
 	rank : int;
 	actual_rank : int};
 	o_elt_out:bool);
@@ -10011,28 +10236,28 @@ End of Syntax table dump. 
  * package shift_ludic
 	Exported types:
 type shift_ludic__T1_ARRAY = bool^10;
-type shift_ludic__T4_STRUCT =  {currentRank : int; rankToSelect : int; elementSelected : bool};
-type shift_ludic__T5_STRUCT =  {multiplieur : bool^10; rank : int};
-type shift_ludic__T6_STRUCT =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int};
+type shift_ludic__T4_STRUCT = shift_ludic::T4_STRUCT {currentRank : int; rankToSelect : int; elementSelected : bool};
+type shift_ludic__T5_STRUCT = shift_ludic::T5_STRUCT {multiplieur : bool^10; rank : int};
+type shift_ludic__T6_STRUCT = shift_ludic::T6_STRUCT {acc_in_PLC : shift_ludic::T5_STRUCT {multiplieur : bool^10; rank : int}; actual_rank : int};
 type shift_ludic__T3_ARRAY = bool^20;
-type shift_ludic__t_Tacc_inShift =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int};
-type shift_ludic__T7_STRUCT =  {eltToSearch : bool; iselementof : bool};
-type shift_ludic__t_T_isElementOf_ =  {eltToSearch : bool; iselementof : bool};
-type shift_ludic__T2_STRUCT =  {multiplieur : bool^10; rank : int; actual_rank : int};
-type shift_ludic__t_Tacc_in =  {multiplieur : bool^10; rank : int};
-type shift_ludic__t_Tacc_inShift2 =  {multiplieur : bool^10; rank : int; actual_rank : int};
-type shift_ludic__t_iteratedStruct =  {currentRank : int; rankToSelect : int; elementSelected : bool};
+type shift_ludic__t_Tacc_inShift = shift_ludic::T6_STRUCT {acc_in_PLC : shift_ludic::T5_STRUCT {multiplieur : bool^10; rank : int}; actual_rank : int};
+type shift_ludic__T7_STRUCT = shift_ludic::T7_STRUCT {eltToSearch : bool; iselementof : bool};
+type shift_ludic__t_T_isElementOf_ = shift_ludic::T7_STRUCT {eltToSearch : bool; iselementof : bool};
+type shift_ludic__T2_STRUCT = shift_ludic::T2_STRUCT {multiplieur : bool^10; rank : int; actual_rank : int};
+type shift_ludic__t_Tacc_in = shift_ludic::T5_STRUCT {multiplieur : bool^10; rank : int};
+type shift_ludic__t_Tacc_inShift2 = shift_ludic::T2_STRUCT {multiplieur : bool^10; rank : int; actual_rank : int};
+type shift_ludic__t_iteratedStruct = shift_ludic::T4_STRUCT {currentRank : int; rankToSelect : int; elementSelected : bool};
 	Exported constants:
 const shift_ludic__c_size = 10;
 	Exported nodes:
 
 node shift_ludic__n_selectOneStage(
-	i_acc_in: {currentRank : int;
+	i_acc_in:shift_ludic::T4_STRUCT {currentRank : int;
 	rankToSelect : int;
 	elementSelected : bool};
 	i_currentElt:bool) 
 returns (
-	o_acc_out: {currentRank : int;
+	o_acc_out:shift_ludic::T4_STRUCT {currentRank : int;
 	rankToSelect : int;
 	elementSelected : bool});
 let
@@ -10049,7 +10274,7 @@ node shift_ludic__n_selectElementOfRank_inArray_(
 returns (
 	o_elementSelected:bool);
 var
-   v_iterationResult: {currentRank : int; rankToSelect : int; elementSelected : bool};
+   v_iterationResult:shift_ludic::T4_STRUCT {currentRank : int; rankToSelect : int; elementSelected : bool};
 let
     v_iterationResult = red<<node shift_ludic__n_selectOneStage, const
 	10>>(T4_STRUCT{currentRank=0;rankToSelect=i_rankToSelect;elementSelected=i_array[0]},
@@ -10059,11 +10284,11 @@ tel
 -- end of node shift_ludic__n_selectElementOfRank_inArray_
 
 node shift_ludic__n_shiftFill(
-	i_acc_in: {multiplieur : bool^10;
+	i_acc_in:shift_ludic::T2_STRUCT {multiplieur : bool^10;
 	rank : int;
 	actual_rank : int}) 
 returns (
-	o_acc_out: {multiplieur : bool^10;
+	o_acc_out:shift_ludic::T2_STRUCT {multiplieur : bool^10;
 	rank : int;
 	actual_rank : int};
 	o_elt_out:bool);
@@ -10079,12 +10304,12 @@ tel
 -- end of node shift_ludic__n_shiftFill
 
 node shift_ludic__n_shift(
-	i_acc_in: {multiplieur : bool^10;
+	i_acc_in:shift_ludic::T5_STRUCT {multiplieur : bool^10;
 	rank : int}) 
 returns (
 	o_ligne:bool^20);
 var
-   v_bidon: {multiplieur : bool^10; rank : int; actual_rank : int};
+   v_bidon:shift_ludic::T2_STRUCT {multiplieur : bool^10; rank : int; actual_rank : int};
 let
     (v_bidon, o_ligne) = fill<<node shift_ludic__n_shiftFill, const
 	 20>>(T2_STRUCT{multiplieur=i_acc_in.multiplieur;rank=i_acc_in.rank;actual_rank=0});
@@ -10247,15 +10472,63 @@ End of Syntax table dump. 
 const calculs_max__taille = 10;
 type calculs_max__bool_arrays = bool^10;
 type calculs_max__int_arrays = int^10;
-type calculs_max__struct_fill_bool =  {imax1 : int; imax2 : int; icourant : int};
-type calculs_max__struct_max =  {max1 : int; max2 : int; imax1 : int; imax2 : int; icourant : int};
-	Exported constants:
-	Exported nodes:
-
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
-
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/calculs_max.lus
+type calculs_max__struct_fill_bool = calculs_max::struct_fill_bool {imax1 : int; imax2 : int; icourant : int};
+type calculs_max__struct_max = calculs_max::struct_max {max1 : int; max2 : int; imax1 : int; imax2 : int; icourant : int};
+	Exported constants:
+	Exported nodes:
+
+node calculs_max__max(
+	strin:calculs_max::struct_max {max1 : int;
+	max2 : int;
+	imax1 : int;
+	imax2 : int;
+	icourant : int};
+	ecourant:int) 
+returns (
+	strout:calculs_max::struct_max {max1 : int;
+	max2 : int;
+	imax1 : int;
+	imax2 : int;
+	icourant : int});
+let
+    strout =  if ((ecourant <= strin.max2)) then
+	(struct_max{max1=strin.max1;max2=strin.max2;imax1=strin.imax1;imax2=strin.imax2;icourant=(strin.icourant
+	+ 1)}) else ( if (((ecourant > strin.max2) and (ecourant <= strin.max1)))
+	then
+	(struct_max{max1=strin.max1;max2=ecourant;imax1=strin.imax1;imax2=strin.icourant;icourant=(strin.icourant
+	+ 1)}) else
+	(struct_max{max1=ecourant;max2=strin.max1;imax1=strin.icourant;imax2=strin.imax1;icourant=(strin.icourant
+	 + 1)}));
+tel
+-- end of node calculs_max__max
+
+node calculs_max__fill_bool(
+	s_in:calculs_max::struct_fill_bool {imax1 : int;
+	imax2 : int;
+	icourant : int}) 
+returns (
+	s_out:calculs_max::struct_fill_bool {imax1 : int;
+	imax2 : int;
+	icourant : int};
+	elt:bool);
+let
+    s_out =
+	struct_fill_bool{imax1=s_in.imax1;imax2=s_in.imax2;icourant=(s_in.icourant
+	 + 1)};
+   elt = ((s_in.icourant = s_in.imax1) or (s_in.icourant = s_in.imax2));
+tel
+-- end of node calculs_max__fill_bool
+node calculs_max__calculs_max(A:int^10) returns (res:bool^10);
+var
+   local_struct:calculs_max::struct_max {max1 : int; max2 : int; imax1 : int; imax2 : int; icourant : int};
+   tmp:calculs_max::struct_fill_bool {imax1 : int; imax2 : int; icourant : int};
+let
+    local_struct = red<<node calculs_max__max, const
+	 10>>(struct_max{max1=0;max2=0;imax1=-(1);imax2=-(1);icourant=0}, A);
+    (tmp, res) = fill<<node calculs_max__fill_bool, const
+	 10>>(struct_fill_bool{imax1=local_struct.imax1;imax2=local_struct.imax2;icourant=0});
+tel
+-- end of node calculs_max__calculs_max
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/deSimone.lus
@@ -10287,14 +10560,59 @@ End of Syntax table dump. 
 	Exported types:
 const deSimone__size = 10;
 type deSimone__tabType = bool^10;
-type deSimone__cell_accu =  {token : bool; grant : bool};
+type deSimone__cell_accu = deSimone::cell_accu {token : bool; grant : bool};
 	Exported constants:
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+node deSimone__oneCell(
+	accu_in:deSimone::cell_accu {token : bool;
+	grant : bool};
+	req:bool) 
+returns (
+	accu_out:deSimone::cell_accu {token : bool;
+	grant : bool};
+	ackout:bool);
+let
+    ackout = (((req and accu_in.token) and accu_in.grant) and not(false ->
+	 pre(ackout)));
+    accu_out = cell_accu{token=accu_in.token;grant=(not(req) and
+	 accu_in.grant)};
+tel
+-- end of node deSimone__oneCell
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/deSimone.lus
+node deSimone__prop1_iter(
+	accu_in:int;
+	elt_in:bool) 
+returns (
+	accu_out:int);
+let
+   accu_out = (accu_in +  if (elt_in) then (1) else (0));
+tel
+-- end of node deSimone__prop1_iter
+
+node deSimone__deSimone(
+	new_token:bool;
+	request:bool^10) 
+returns (
+	acknowledge:bool^10);
+var
+   accu_out:deSimone::cell_accu {token : bool; grant : bool};
+let
+    (accu_out, acknowledge) = fillred<<node deSimone__oneCell, const
+	 10>>(cell_accu{token=new_token;grant=true}, request);
+tel
+-- end of node deSimone__deSimone
+node deSimone__prop1(request:bool^10) returns (ok:bool);
+var
+   acknowledge:bool^10;
+   nb_acknowledge:int;
+let
+   acknowledge = deSimone__deSimone(request);
+    nb_acknowledge = red<<node deSimone__prop1_iter, const 10>>(0,
+	 acknowledge);
+   ok = (nb_acknowledge <= 1);
+tel
+-- end of node deSimone__prop1
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/iterFibo.lus
@@ -10594,15 +10912,34 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package moyenne
 	Exported types:
-type moyenne__moyenne_accu =  {sum : real; moyenne : real; rank : real};
+type moyenne__moyenne_accu = moyenne::moyenne_accu {sum : real; moyenne : real; rank : real};
 	Exported constants:
 const moyenne__size = 10;
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
-
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/moyenne.lus
+node moyenne__moyenne_step(
+	accu_in:moyenne::moyenne_accu {sum : real;
+	moyenne : real;
+	rank : real};
+	elt_in:real) 
+returns (
+	accu_out:moyenne::moyenne_accu {sum : real;
+	moyenne : real;
+	rank : real});
+let
+    accu_out = moyenne_accu{sum=(accu_in.sum + elt_in);moyenne=((accu_in.sum +
+	 elt_in) / (accu_in.rank + 1.0));rank=(accu_in.rank + 1.0)};
+tel
+-- end of node moyenne__moyenne_step
+node moyenne__moyenne(Tab:real^10) returns (moy:real);
+var
+   accu_out:moyenne::moyenne_accu {sum : real; moyenne : real; rank : real};
+let
+    accu_out = red<<node moyenne__moyenne_step, const
+	 10>>(moyenne_accu{sum=0.0;moyenne=0.0;rank=0.0}, Tab);
+   moy = accu_out.moyenne;
+tel
+-- end of node moyenne__moyenne
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/normal.lus
@@ -10675,13 +11012,13 @@ const normal__NBC = 20;
 type normal__INTNBC = int^20;
 const normal__NBG = 4;
 type normal__INTNBG = int^4;
-type normal__T_EntreeGlob =  {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4};
+type normal__T_EntreeGlob = normal::T_EntreeGlob {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4};
 type normal__T_ComChg = int;
-type normal__T_InfoGenIndiv =  {mesure_gen : int};
+type normal__T_InfoGenIndiv = normal::T_InfoGenIndiv {mesure_gen : int};
 type normal__T_EtatCharge = int;
-type normal__T_InfoChgGlob =  {chg2gen : int^20};
-type normal__T_InfoChgIndiv =  {mesure_chg : int};
-type normal__T_InfoGenGlob =  {elt_bidon : int; chg2gen : int^20};
+type normal__T_InfoChgGlob = normal::T_InfoChgGlob {chg2gen : int^20};
+type normal__T_InfoChgIndiv = normal::T_InfoChgIndiv {mesure_chg : int};
+type normal__T_InfoGenGlob = normal::T_InfoGenGlob {elt_bidon : int; chg2gen : int^20};
 	Exported constants:
 const normal__EC_LESTAGE = 3;
 const normal__COM_ON = 1;
@@ -10693,10 +11030,339 @@ const normal__EC_ON = 0;
 const normal__COM_ERR = 0;
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+node normal__int2InfoChgIndiv(
+	m:int) 
+returns (
+	InfoChgIndiv:normal::T_InfoChgIndiv {mesure_chg : int});
+let
+   InfoChgIndiv = T_InfoChgIndiv{mesure_chg=m};
+tel
+-- end of node normal__int2InfoChgIndiv
+
+node normal__extract_tab_info_chg_indiv(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoChgIndiv:normal::T_InfoChgIndiv {mesure_chg : int}^20);
+let
+    TabInfoChgIndiv = map<<node normal__int2InfoChgIndiv, const
+	 20>>(EntreeGlob.mesure_chgs);
+tel
+-- end of node normal__extract_tab_info_chg_indiv
+
+node normal__int2InfoGenIndiv(
+	m:int) 
+returns (
+	InfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int});
+let
+   InfoGenIndiv = T_InfoGenIndiv{mesure_gen=m};
+tel
+-- end of node normal__int2InfoGenIndiv
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/normal.lus
+node normal__extract_tab_info_gen_indiv(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int}^4);
+let
+    TabInfoGenIndiv = map<<node normal__int2InfoGenIndiv, const
+	 4>>(EntreeGlob.mesure_gens);
+tel
+-- end of node normal__extract_tab_info_gen_indiv
+node normal__egal_indice(indice:int; val:int) returns (r:bool);
+let
+   r = (val = indice);
+tel
+-- end of node normal__egal_indice
+node normal__copie(acc_in:int) returns (acc_out:int; elt:int);
+let
+   acc_out = acc_in;
+   elt = acc_in;
+tel
+-- end of node normal__copie
+
+node normal__essai_traite_gen(
+	indice_gen:int;
+	infoGenGlob:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}) 
+returns (
+	TabComVal:bool^20);
+var
+   Tab_indiceGen:int^20;
+   bid:int;
+let
+   (bid, Tab_indiceGen) = fill<<node normal__copie, const 20>>(indice_gen);
+    TabComVal = map<<node normal__egal_indice, const 20>>(Tab_indiceGen,
+	 infoGenGlob.chg2gen);
+tel
+-- end of node normal__essai_traite_gen
+
+node normal__fusion_une_com(
+	in_com:int;
+	cur_com:int;
+	cur_val:bool) 
+returns (
+	out_com:int);
+let
+   out_com =  if (cur_val) then (cur_com) else (in_com);
+tel
+-- end of node normal__fusion_une_com
+
+node normal__fusion_tab_com(
+	acc_in:int^20;
+	TabCom:int^20;
+	TabVal:bool^20) 
+returns (
+	acc_out:int^20);
+let
+    acc_out = map<<node normal__fusion_une_com, const 20>>(acc_in, TabCom,
+	 TabVal);
+tel
+-- end of node normal__fusion_tab_com
+
+node normal__fusion_com(
+	AllTabComChg:int^20^4;
+	AllTabComVal:bool^20^4) 
+returns (
+	TabComChg:int^20);
+var
+   Vide:int^20;
+let
+   Vide = int^20;
+    TabComChg = red<<node normal__fusion_tab_com, const 4>>(Vide,
+	 AllTabComChg, AllTabComVal);
+tel
+-- end of node normal__fusion_com
+
+node normal__traite_genCore_itere(
+	acc_in:int;
+	elt1:bool;
+	elt2:int) 
+returns (
+	acc_out:int;
+	elt:int);
+let
+   elt =  if (elt1) then (elt2) else (acc_in);
+   acc_out = acc_in;
+tel
+-- end of node normal__traite_genCore_itere
+
+node normal__essai2(
+	a:int^20;
+	d:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}) 
+returns (
+	c:bool^20);
+let
+   c = map<<node normal__egal_indice, const 20>>(a, d.chg2gen);
+tel
+-- end of node normal__essai2
+node normal__id(elt_in:int) returns (elt_out:int);
+let
+   elt_out = elt_in;
+tel
+-- end of node normal__id
+
+node normal__extract_info_chg_glob(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	InfoChgGlob:normal::T_InfoChgGlob {chg2gen : int^20});
+let
+    InfoChgGlob = T_InfoChgGlob{chg2gen=map<<node normal__id, const
+	 20>>(EntreeGlob.chg2gen)};
+tel
+-- end of node normal__extract_info_chg_glob
+
+node normal__extrCharge(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoChgIndiv:normal::T_InfoChgIndiv {mesure_chg : int}^20;
+	TabInfoChgGlob:normal::T_InfoChgGlob {chg2gen : int^20}^20);
+let
+   TabInfoChgIndiv = normal__extract_tab_info_chg_indiv(EntreeGlob);
+   TabInfoChgGlob = normal::T_InfoChgGlob {chg2gen : int^20}^20;
+tel
+-- end of node normal__extrCharge
+node normal__trChItere(acc_in:int; elt:int) returns (acc_out:int);
+let
+   acc_out =  if ((acc_in > elt)) then (acc_in) else (elt);
+tel
+-- end of node normal__trChItere
+
+node normal__essai3(
+	indice:int^20;
+	info:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}) 
+returns (
+	Connerie:bool^20);
+let
+    Connerie = map<<node normal__egal_indice, const 20>>(indice,
+	 info.chg2gen);
+tel
+-- end of node normal__essai3
+
+node normal__traite_gen_core(
+	indice_gen:int;
+	InfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int};
+	InfoGenGlob:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20};
+	TabEtatCharge:int^20;
+	TabComVal:bool^20) 
+returns (
+	TabComChg:int^20);
+var
+   bidon:int;
+let
+    (bidon, TabComChg) = fillred<<node normal__traite_genCore_itere, const
+	 20>>(indice_gen, TabComVal, InfoGenGlob.chg2gen);
+tel
+-- end of node normal__traite_gen_core
+
+node normal__traite_gen(
+	indice_gen:int;
+	InfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int};
+	InfoGenGlob:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20};
+	TabEtatCharge:int^20) 
+returns (
+	TabComChg:int^20;
+	TabComVal:bool^20);
+var
+   TabComVal_bis:bool^20;
+   TabIndiceGen:int^20;
+   bid:int;
+let
+    TabComVal_bis = map<<node normal__egal_indice, const 20>>(TabIndiceGen,
+	 InfoGenGlob.chg2gen);
+   (bid, TabIndiceGen) = fill<<node normal__copie, const 20>>(indice_gen);
+    TabComChg = normal__traite_gen_core(indice_gen, InfoGenIndiv, InfoGenGlob,
+	 TabEtatCharge, TabComVal_bis);
+    TabComVal = map<<node normal__egal_indice, const 20>>(TabIndiceGen,
+	 InfoGenGlob.chg2gen);
+tel
+-- end of node normal__traite_gen
+
+node normal__extract_info_gen_glob(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	InfoGenGlob:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20});
+let
+    InfoGenGlob = T_InfoGenGlob{elt_bidon=0;chg2gen=map<<node normal__id,
+	 const 20>>(EntreeGlob.chg2gen)};
+tel
+-- end of node normal__extract_info_gen_glob
+
+node normal__traite_charge(
+	InfoChgIndiv:normal::T_InfoChgIndiv {mesure_chg : int};
+	InfoChgGlob:normal::T_InfoChgGlob {chg2gen : int^20}) 
+returns (
+	EtatCharge:int);
+let
+    EtatCharge = red<<node normal__trChItere, const
+	 20>>(InfoChgIndiv.mesure_chg, InfoChgGlob.chg2gen);
+tel
+-- end of node normal__traite_charge
+node normal__incr_acc(acc_in:int) returns (acc_out:int; res:int);
+let
+   res = acc_in;
+   acc_out = (res + 1);
+tel
+-- end of node normal__incr_acc
+
+node normal__extrGen(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int}^4;
+	TabInfoGenGlob:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}^4;
+	TabIndiceGen:int^4);
+var
+   bid:int;
+let
+   TabInfoGenIndiv = normal__extract_tab_info_gen_indiv(EntreeGlob);
+    TabInfoGenGlob = normal::T_InfoGenGlob {elt_bidon : int; chg2gen :
+	 int^20}^4;
+   (bid, TabIndiceGen) = fill<<node normal__incr_acc, const 4>>(0);
+tel
+-- end of node normal__extrGen
+
+node normal__traiteGen(
+	TabIndiceGen:int^4;
+	TabInfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int}^4;
+	TabInfoGenGlob:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}^4;
+	TabEtatCharge:int^20) 
+returns (
+	AllTabComChg:int^20^4;
+	AllTabComVal:bool^20^4);
+let
+    (AllTabComChg, AllTabComVal) = map<<node normal__traite_gen, const
+	 4>>(TabIndiceGen, TabInfoGenIndiv, TabInfoGenGlob, int^20^4);
+tel
+-- end of node normal__traiteGen
+
+node normal__traiteChg(
+	TabInfoChgIndiv:normal::T_InfoChgIndiv {mesure_chg : int}^20;
+	TabInfoChgGlob:normal::T_InfoChgGlob {chg2gen : int^20}^20) 
+returns (
+	TabEtatCharge:int^20);
+let
+    TabEtatCharge = map<<node normal__traite_charge, const
+	 20>>(TabInfoChgIndiv, TabInfoChgGlob);
+tel
+-- end of node normal__traiteChg
+
+node normal__normal(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabComChg:int^20);
+var
+   TabInfoChgIndiv:normal::T_InfoChgIndiv {mesure_chg : int}^20;
+   TabInfoChgGlob:normal::T_InfoChgGlob {chg2gen : int^20}^20;
+   TabEtatCharge:int^20;
+   TabInfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int}^4;
+   TabInfoGenGlob:normal::T_InfoGenGlob {elt_bidon : int; chg2gen : int^20}^4;
+   TabIndiceGen:int^4;
+   AllTabComChg:int^20^4;
+   AllTabComVal:bool^20^4;
+let
+   (TabInfoChgIndiv, TabInfoChgGlob) = normal__extrCharge(EntreeGlob);
+   TabEtatCharge = normal__traiteChg(TabInfoChgIndiv, TabInfoChgGlob);
+    (TabInfoGenIndiv, TabInfoGenGlob, TabIndiceGen) =
+	 normal__extrGen(EntreeGlob);
+    (AllTabComChg, AllTabComVal) = normal__traiteGen(TabIndiceGen,
+	 TabInfoGenIndiv, TabInfoGenGlob, TabEtatCharge);
+   TabComChg = normal__fusion_com(AllTabComChg, AllTabComVal);
+tel
+-- end of node normal__normal
+
+node normal__traite_gen_bis(
+	a:int;
+	c:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}) 
+returns (
+	e:bool^20);
+var
+   loc_a:int^20;
+   bid:int;
+let
+   (bid, loc_a) = fill<<node normal__copie, const 20>>(a);
+   e = map<<node normal__egal_indice, const 20>>(loc_a, c.chg2gen);
+tel
+-- end of node normal__traite_gen_bis
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/pipeline.lus
@@ -11032,15 +11698,15 @@ const testSilus__NBC = 20;
 type testSilus__INTNBC = int^20;
 const testSilus__NBG = 4;
 type testSilus__INTNBG = int^4;
-type testSilus__T_EntreeGlob =  {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4};
+type testSilus__T_EntreeGlob = testSilus::T_EntreeGlob {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4};
 type testSilus__T_ComChg = int;
-type testSilus__T_InfoGenIndiv =  {mesure_gen : int};
+type testSilus__T_InfoGenIndiv = testSilus::T_InfoGenIndiv {mesure_gen : int};
 type testSilus__BOOLNBC = bool^20;
 type testSilus__T_EtatCharge = int;
-type testSilus__T_InfoChgGlob =  {chg2gen : int^20};
-type testSilus__T_InfoChgIndiv =  {mesure_chg : int};
+type testSilus__T_InfoChgGlob = testSilus::T_InfoChgGlob {chg2gen : int^20};
+type testSilus__T_InfoChgIndiv = testSilus::T_InfoChgIndiv {mesure_chg : int};
 type testSilus__T_ComChgNBC = int^20;
-type testSilus__T_InfoGenGlob =  {elt_bidon : int; chg2gen : int^20};
+type testSilus__T_InfoGenGlob = testSilus::T_InfoGenGlob {elt_bidon : int; chg2gen : int^20};
 	Exported constants:
 const testSilus__EC_LESTAGE = 3;
 const testSilus__COM_ON = 1;
@@ -11052,10 +11718,283 @@ const testSilus__EC_ON = 0;
 const testSilus__COM_ERR = 0;
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+node testSilus__int2InfoChgIndiv(
+	m:int) 
+returns (
+	InfoChgIndiv:testSilus::T_InfoChgIndiv {mesure_chg : int});
+let
+   InfoChgIndiv = T_InfoChgIndiv{mesure_chg=m};
+tel
+-- end of node testSilus__int2InfoChgIndiv
+
+node testSilus__extract_tab_info_chg_indiv(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoChgIndiv:testSilus::T_InfoChgIndiv {mesure_chg : int}^20);
+let
+    TabInfoChgIndiv = map<<node testSilus__int2InfoChgIndiv, const
+	 20>>(EntreeGlob.mesure_chgs);
+tel
+-- end of node testSilus__extract_tab_info_chg_indiv
+
+node testSilus__int2InfoGenIndiv(
+	m:int) 
+returns (
+	InfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int});
+let
+   InfoGenIndiv = T_InfoGenIndiv{mesure_gen=m};
+tel
+-- end of node testSilus__int2InfoGenIndiv
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/testSilus.lus
+node testSilus__extract_tab_info_gen_indiv(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int}^4);
+let
+    TabInfoGenIndiv = map<<node testSilus__int2InfoGenIndiv, const
+	 4>>(EntreeGlob.mesure_gens);
+tel
+-- end of node testSilus__extract_tab_info_gen_indiv
+node testSilus__egal_indice(indice:int; val:int) returns (r:bool);
+let
+   r = (val = indice);
+tel
+-- end of node testSilus__egal_indice
+node testSilus__copie(acc_in:int) returns (acc_out:int; elt:int);
+let
+   acc_out = acc_in;
+   elt = acc_in;
+tel
+-- end of node testSilus__copie
+
+node testSilus__fusion_une_com(
+	in_com:int;
+	cur_com:int;
+	cur_val:bool) 
+returns (
+	out_com:int);
+let
+   out_com =  if (cur_val) then (cur_com) else (in_com);
+tel
+-- end of node testSilus__fusion_une_com
+
+node testSilus__fusion_tab_com(
+	acc_in:int^20;
+	TabCom:int^20;
+	TabVal:bool^20) 
+returns (
+	acc_out:int^20);
+let
+    acc_out = map<<node testSilus__fusion_une_com, const 20>>(acc_in, TabCom,
+	 TabVal);
+tel
+-- end of node testSilus__fusion_tab_com
+
+node testSilus__fusion_com(
+	AllTabComChg:int^20^4;
+	AllTabComVal:bool^20^4) 
+returns (
+	TabComChg:int^20);
+var
+   Vide:int^20;
+let
+   Vide = int^20;
+    TabComChg = red<<node testSilus__fusion_tab_com, const 4>>(Vide,
+	 AllTabComChg, AllTabComVal);
+tel
+-- end of node testSilus__fusion_com
+
+node testSilus__traite_genCore_itere(
+	acc_in:int;
+	elt1:bool;
+	elt2:int) 
+returns (
+	acc_out:int;
+	elt:int);
+let
+   elt =  if (elt1) then (elt2) else (acc_in);
+   acc_out = acc_in;
+tel
+-- end of node testSilus__traite_genCore_itere
+node testSilus__id(elt_in:int) returns (elt_out:int);
+let
+   elt_out = elt_in;
+tel
+-- end of node testSilus__id
+
+node testSilus__extract_info_chg_glob(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	InfoChgGlob:testSilus::T_InfoChgGlob {chg2gen : int^20});
+let
+    InfoChgGlob = T_InfoChgGlob{chg2gen=map<<node testSilus__id, const
+	 20>>(EntreeGlob.chg2gen)};
+tel
+-- end of node testSilus__extract_info_chg_glob
+
+node testSilus__extrCharge(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoChgIndiv:testSilus::T_InfoChgIndiv {mesure_chg : int}^20;
+	TabInfoChgGlob:testSilus::T_InfoChgGlob {chg2gen : int^20}^20);
+let
+   TabInfoChgIndiv = testSilus__extract_tab_info_chg_indiv(EntreeGlob);
+   TabInfoChgGlob = testSilus::T_InfoChgGlob {chg2gen : int^20}^20;
+tel
+-- end of node testSilus__extrCharge
+node testSilus__trChItere(acc_in:int; elt:int) returns (acc_out:int);
+let
+   acc_out =  if ((acc_in > elt)) then (acc_in) else (elt);
+tel
+-- end of node testSilus__trChItere
+
+node testSilus__traite_gen_core(
+	indice_gen:int;
+	InfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int};
+	InfoGenGlob:testSilus::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20};
+	TabEtatCharge:int^20;
+	TabComVal:bool^20) 
+returns (
+	TabComChg:int^20);
+var
+   bidon:int;
+let
+    (bidon, TabComChg) = fillred<<node testSilus__traite_genCore_itere, const
+	 20>>(indice_gen, TabComVal, InfoGenGlob.chg2gen);
+tel
+-- end of node testSilus__traite_gen_core
+
+node testSilus__traite_gen(
+	indice_gen:int;
+	InfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int};
+	InfoGenGlob:testSilus::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20};
+	TabEtatCharge:int^20) 
+returns (
+	TabComChg:int^20;
+	TabComVal:bool^20);
+var
+   TabIndiceGen:int^20;
+   bidon:int;
+let
+    TabComChg = testSilus__traite_gen_core(indice_gen, InfoGenIndiv,
+	 InfoGenGlob, TabEtatCharge, TabComVal);
+    TabComVal = map<<node testSilus__egal_indice, const 20>>(TabIndiceGen,
+	 InfoGenGlob.chg2gen);
+    (bidon, TabIndiceGen) = fill<<node testSilus__copie, const
+	 20>>(indice_gen);
+tel
+-- end of node testSilus__traite_gen
+
+node testSilus__extract_info_gen_glob(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	InfoGenGlob:testSilus::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20});
+let
+    InfoGenGlob = T_InfoGenGlob{elt_bidon=0;chg2gen=map<<node testSilus__id,
+	 const 20>>(EntreeGlob.chg2gen)};
+tel
+-- end of node testSilus__extract_info_gen_glob
+
+node testSilus__traite_charge(
+	InfoChgIndiv:testSilus::T_InfoChgIndiv {mesure_chg : int};
+	InfoChgGlob:testSilus::T_InfoChgGlob {chg2gen : int^20}) 
+returns (
+	EtatCharge:int);
+let
+    EtatCharge = red<<node testSilus__trChItere, const
+	 20>>(InfoChgIndiv.mesure_chg, InfoChgGlob.chg2gen);
+tel
+-- end of node testSilus__traite_charge
+
+node testSilus__traiteChg(
+	TabInfoChgIndiv:testSilus::T_InfoChgIndiv {mesure_chg : int}^20;
+	TabInfoChgGlob:testSilus::T_InfoChgGlob {chg2gen : int^20}^20) 
+returns (
+	TabEtatCharge:int^20);
+let
+    TabEtatCharge = map<<node testSilus__traite_charge, const
+	 20>>(TabInfoChgIndiv, TabInfoChgGlob);
+tel
+-- end of node testSilus__traiteChg
+node testSilus__incr_acc(acc_in:int) returns (acc_out:int; res:int);
+let
+   res = acc_in;
+   acc_out = (res + 1);
+tel
+-- end of node testSilus__incr_acc
+
+node testSilus__extrGen(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int}^4;
+	TabInfoGenGlob:testSilus::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}^4;
+	TabIndiceGen:int^4);
+var
+   bidon:int;
+let
+   TabInfoGenIndiv = testSilus__extract_tab_info_gen_indiv(EntreeGlob);
+    TabInfoGenGlob = testSilus::T_InfoGenGlob {elt_bidon : int; chg2gen :
+	 int^20}^4;
+   (bidon, TabIndiceGen) = fill<<node testSilus__incr_acc, const 4>>(0);
+tel
+-- end of node testSilus__extrGen
+
+node testSilus__traiteGen(
+	TabIndiceGen:int^4;
+	TabInfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int}^4;
+	TabInfoGenGlob:testSilus::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}^4;
+	TabEtatCharge:int^20) 
+returns (
+	AllTabComChg:int^20^4;
+	AllTabComVal:bool^20^4);
+let
+    (AllTabComChg, AllTabComVal) = map<<node testSilus__traite_gen, const
+	 4>>(TabIndiceGen, TabInfoGenIndiv, TabInfoGenGlob, int^20^4);
+tel
+-- end of node testSilus__traiteGen
+
+node testSilus__testSilus(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabComChg:int^20);
+var
+   TabInfoChgIndiv:testSilus::T_InfoChgIndiv {mesure_chg : int}^20;
+   TabInfoChgGlob:testSilus::T_InfoChgGlob {chg2gen : int^20}^20;
+   TabEtatCharge:int^20;
+   TabInfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int}^4;
+   TabInfoGenGlob:testSilus::T_InfoGenGlob {elt_bidon : int; chg2gen : int^20}^4;
+   TabIndiceGen:int^4;
+   AllTabComChg:int^20^4;
+   AllTabComVal:bool^20^4;
+let
+   (TabInfoChgIndiv, TabInfoChgGlob) = testSilus__extrCharge(EntreeGlob);
+   TabEtatCharge = testSilus__traiteChg(TabInfoChgIndiv, TabInfoChgGlob);
+    (TabInfoGenIndiv, TabInfoGenGlob, TabIndiceGen) =
+	 testSilus__extrGen(EntreeGlob);
+    (AllTabComChg, AllTabComVal) = testSilus__traiteGen(TabIndiceGen,
+	 TabInfoGenIndiv, TabInfoGenGlob, TabEtatCharge);
+   TabComChg = testSilus__fusion_com(AllTabComChg, AllTabComVal);
+tel
+-- end of node testSilus__testSilus
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/triSel.lus
@@ -11094,18 +12033,136 @@ End of Syntax table dump. 
 	Exported types:
 const triSel__size = 50;
 type triSel__tabSize = int^50;
-type triSel__Sort_accu =  {CurrentRank : int; Tab : int^50};
-type triSel__Select_accu =  {RankToFind : int; CurrentRank : int; Val : int};
-type triSel__MinFR_accu =  {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
-type triSel__sorted_iter_accu =  {prev_elt : int; prop_is_tt : bool};
-type triSel__Exchange_accu =  {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
+type triSel__Sort_accu = triSel::Sort_accu {CurrentRank : int; Tab : int^50};
+type triSel__Select_accu = triSel::Select_accu {RankToFind : int; CurrentRank : int; Val : int};
+type triSel__MinFR_accu = triSel::MinFR_accu {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
+type triSel__sorted_iter_accu = triSel::sorted_iter_accu {prev_elt : int; prop_is_tt : bool};
+type triSel__Exchange_accu = triSel::Exchange_accu {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
 	Exported constants:
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+node triSel__minFromRank(
+	accu_in:triSel::MinFR_accu {MinVal : int;
+	MinRank : int;
+	RankFrom : int;
+	Rank : int};
+	TabEltIn:int) 
+returns (
+	accu_out:triSel::MinFR_accu {MinVal : int;
+	MinRank : int;
+	RankFrom : int;
+	Rank : int});
+let
+    accu_out = MinFR_accu{MinVal= if (((accu_in.Rank = 0) or (accu_in.Rank =
+	accu_in.RankFrom))) then (TabEltIn) else ( if ((accu_in.Rank >=
+	accu_in.RankFrom)) then ( if ((TabEltIn < accu_in.MinVal)) then (TabEltIn)
+	else (accu_in.MinVal)) else (accu_in.MinVal));MinRank= if (((accu_in.Rank =
+	0) or (accu_in.Rank = accu_in.RankFrom))) then (accu_in.Rank) else ( if
+	((accu_in.Rank >= accu_in.RankFrom)) then ( if ((TabEltIn <
+	accu_in.MinVal)) then (accu_in.Rank) else (accu_in.MinRank)) else
+	 (accu_in.MinRank));RankFrom=accu_in.RankFrom;Rank=(accu_in.Rank + 1)};
+tel
+-- end of node triSel__minFromRank
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/triSel.lus
+node triSel__select(
+	accu_in:triSel::Select_accu {RankToFind : int;
+	CurrentRank : int;
+	Val : int};
+	elt:int) 
+returns (
+	accu_out:triSel::Select_accu {RankToFind : int;
+	CurrentRank : int;
+	Val : int});
+let
+    accu_out =
+	Select_accu{RankToFind=accu_in.RankToFind;CurrentRank=(accu_in.CurrentRank
+	+ 1);Val= if ((accu_in.RankToFind = accu_in.CurrentRank)) then (elt) else
+	 (accu_in.Val)};
+tel
+-- end of node triSel__select
+
+node triSel__Exchange_i_j(
+	accu_in:triSel::Exchange_accu {MinVal : int;
+	MinRank : int;
+	RankFrom : int;
+	CurrentVal : int;
+	Rank : int};
+	eltIn:int) 
+returns (
+	accu_out:triSel::Exchange_accu {MinVal : int;
+	MinRank : int;
+	RankFrom : int;
+	CurrentVal : int;
+	Rank : int};
+	eltOut:int);
+let
+    accu_out =
+	Exchange_accu{MinVal=accu_in.MinVal;MinRank=accu_in.MinRank;RankFrom=accu_in.RankFrom;CurrentVal=accu_in.CurrentVal;Rank=(accu_in.Rank
+	 + 1)};
+    eltOut =  if ((accu_in.Rank = accu_in.MinRank)) then (accu_in.CurrentVal)
+	else ( if ((accu_in.Rank = accu_in.RankFrom)) then (accu_in.MinVal) else
+	 (eltIn));
+tel
+-- end of node triSel__Exchange_i_j
+
+node triSel__UnarySort(
+	accu_in:triSel::Sort_accu {CurrentRank : int;
+	Tab : int^50};
+	eltIn:int) 
+returns (
+	accu_out:triSel::Sort_accu {CurrentRank : int;
+	Tab : int^50});
+var
+   accu_out_select:triSel::Select_accu {RankToFind : int; CurrentRank : int; Val : int};
+   accu_out_min:triSel::MinFR_accu {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
+   accu_out_exchange:triSel::Exchange_accu {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
+   localTab:int^50;
+let
+    accu_out_min = red<<node triSel__minFromRank, const
+	50>>(MinFR_accu{MinVal=0;MinRank=0;RankFrom=accu_in.CurrentRank;Rank=0},
+	 accu_in.Tab);
+    accu_out_select = red<<node triSel__select, const
+	50>>(Select_accu{RankToFind=accu_in.CurrentRank;CurrentRank=0;Val=0},
+	 accu_in.Tab);
+    (accu_out_exchange, localTab) = fillred<<node triSel__Exchange_i_j, const
+	50>>(Exchange_accu{MinVal=accu_out_min.MinVal;MinRank=accu_out_min.MinRank;RankFrom=accu_out_select.RankToFind;CurrentVal=accu_out_select.Val;Rank=0},
+	 accu_in.Tab);
+   accu_out = Sort_accu{CurrentRank=(accu_in.CurrentRank + 1);Tab=localTab};
+tel
+-- end of node triSel__UnarySort
+node triSel__triSel(TIn:int^50) returns (TSorted:int^50);
+var
+   UnarySort_accu_out:triSel::Sort_accu {CurrentRank : int; Tab : int^50};
+let
+    UnarySort_accu_out = red<<node triSel__UnarySort, const
+	 50>>(Sort_accu{CurrentRank=0;Tab=TIn}, TIn);
+   TSorted = UnarySort_accu_out.Tab;
+tel
+-- end of node triSel__triSel
+
+node triSel__sorted_iter(
+	accu_in:triSel::sorted_iter_accu {prev_elt : int;
+	prop_is_tt : bool};
+	elt:int) 
+returns (
+	accu_out:triSel::sorted_iter_accu {prev_elt : int;
+	prop_is_tt : bool});
+let
+    accu_out = sorted_iter_accu{prev_elt=elt;prop_is_tt=((accu_in.prev_elt <=
+	 elt) and accu_in.prop_is_tt)};
+tel
+-- end of node triSel__sorted_iter
+node triSel__Sorted(TIn:int^50) returns (ok:bool);
+var
+   accu_out:triSel::sorted_iter_accu {prev_elt : int; prop_is_tt : bool};
+   TSorted:int^50;
+let
+   TSorted = triSel__triSel(TIn);
+    accu_out = red<<node triSel__sorted_iter, const
+	 50>>(sorted_iter_accu{prev_elt=0;prop_is_tt=true}, TSorted);
+   ok = accu_out.prop_is_tt;
+tel
+-- end of node triSel__Sorted
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/packEnvTest/Condact.lus
@@ -11140,15 +12197,43 @@ End of Syntax table dump. 
  * package contractForElementSelectionInArray
 	Exported types:
 type contractForElementSelectionInArray__elementType = int;
-type contractForElementSelectionInArray__iteratedStruct =  {currentRank : int; rankToSelect : int; elementSelected : int};
+type contractForElementSelectionInArray__iteratedStruct = contractForElementSelectionInArray::iteratedStruct {currentRank : int; rankToSelect : int; elementSelected : int};
 	Exported constants:
 const contractForElementSelectionInArray__size = 10;
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+node contractForElementSelectionInArray__selectOneStage(
+	acc_in:contractForElementSelectionInArray::iteratedStruct {currentRank : int;
+	rankToSelect : int;
+	elementSelected : int};
+	currentElt:int) 
+returns (
+	acc_out:contractForElementSelectionInArray::iteratedStruct {currentRank : int;
+	rankToSelect : int;
+	elementSelected : int});
+let
+    acc_out = iteratedStruct{currentRank=(acc_in.currentRank +
+	1);rankToSelect=acc_in.rankToSelect;elementSelected= if
+	((acc_in.currentRank = acc_in.rankToSelect)) then (currentElt) else
+	 (acc_in.elementSelected)};
+tel
+-- end of node contractForElementSelectionInArray__selectOneStage
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus
+node contractForElementSelectionInArray__selectEltInArray(
+	array:int^10;
+	rankToSelect:int) 
+returns (
+	elementSelected:int);
+var
+   iterationResult:contractForElementSelectionInArray::iteratedStruct {currentRank : int; rankToSelect : int; elementSelected : int};
+let
+    iterationResult = red<<node
+	contractForElementSelectionInArray__selectOneStage, const
+	10>>(iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=0},
+	 array);
+   elementSelected = iterationResult.elementSelected;
+tel
+-- end of node contractForElementSelectionInArray__selectEltInArray
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/packEnvTest/contractForElementSelectionInArray/main.lus
@@ -11240,22 +12325,22 @@ End of Syntax table dump. 
 	Exported types:
 const tri__size = 10;
 type tri__INTSIZE = int^10;
-type tri__Sort_accu =  {CurrentRank : int; Tab : int^10};
-type tri__Select_accu =  {RankToFind : int; CurrentRank : int; Val : int};
-type tri__MinFR_accu =  {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
-type tri__sorted_iter_accu =  {prev_elt : int; prop_is_tt : bool};
-type tri__Exchange_accu =  {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
+type tri__Sort_accu = tri::Sort_accu {CurrentRank : int; Tab : int^10};
+type tri__Select_accu = tri::Select_accu {RankToFind : int; CurrentRank : int; Val : int};
+type tri__MinFR_accu = tri::MinFR_accu {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
+type tri__sorted_iter_accu = tri::sorted_iter_accu {prev_elt : int; prop_is_tt : bool};
+type tri__Exchange_accu = tri::Exchange_accu {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
 	Exported constants:
 	Exported nodes:
 
 node tri__minFromRank(
-	accu_in: {MinVal : int;
+	accu_in:tri::MinFR_accu {MinVal : int;
 	MinRank : int;
 	RankFrom : int;
 	Rank : int};
 	TabEltIn:int) 
 returns (
-	accu_out: {MinVal : int;
+	accu_out:tri::MinFR_accu {MinVal : int;
 	MinRank : int;
 	RankFrom : int;
 	Rank : int});
@@ -11270,12 +12355,12 @@ tel
 -- end of node tri__minFromRank
 
 node tri__select(
-	accu_in: {RankToFind : int;
+	accu_in:tri::Select_accu {RankToFind : int;
 	CurrentRank : int;
 	Val : int};
 	elt:int) 
 returns (
-	accu_out: {RankToFind : int;
+	accu_out:tri::Select_accu {RankToFind : int;
 	CurrentRank : int;
 	Val : int});
 let
@@ -11287,14 +12372,14 @@ tel
 -- end of node tri__select
 
 node tri__Exchange_i_j(
-	accu_in: {MinVal : int;
+	accu_in:tri::Exchange_accu {MinVal : int;
 	MinRank : int;
 	RankFrom : int;
 	CurrentVal : int;
 	Rank : int};
 	eltIn:int) 
 returns (
-	accu_out: {MinVal : int;
+	accu_out:tri::Exchange_accu {MinVal : int;
 	MinRank : int;
 	RankFrom : int;
 	CurrentVal : int;
@@ -11311,16 +12396,16 @@ tel
 -- end of node tri__Exchange_i_j
 
 node tri__UnarySort(
-	accu_in: {CurrentRank : int;
+	accu_in:tri::Sort_accu {CurrentRank : int;
 	Tab : int^10};
 	eltIn:int) 
 returns (
-	accu_out: {CurrentRank : int;
+	accu_out:tri::Sort_accu {CurrentRank : int;
 	Tab : int^10});
 var
-   accu_out_select: {RankToFind : int; CurrentRank : int; Val : int};
-   accu_out_min: {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
-   accu_out_exchange: {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
+   accu_out_select:tri::Select_accu {RankToFind : int; CurrentRank : int; Val : int};
+   accu_out_min:tri::MinFR_accu {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
+   accu_out_exchange:tri::Exchange_accu {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
    localTab:int^10;
 let
     accu_out_min = red<<node tri__minFromRank, const
@@ -11337,7 +12422,7 @@ tel
 -- end of node tri__UnarySort
 node tri__main(TIn:int^10) returns (TSorted:int^10);
 var
-   UnarySort_accu_out: {CurrentRank : int; Tab : int^10};
+   UnarySort_accu_out:tri::Sort_accu {CurrentRank : int; Tab : int^10};
 let
     UnarySort_accu_out = red<<node tri__UnarySort, const
 	10>>(Sort_accu{CurrentRank=0;Tab=[7, 8, 4, 3, 2, 9, 1, 10, 2, 7]}, [7, 8,
@@ -11347,11 +12432,11 @@ tel
 -- end of node tri__main
 
 node tri__sorted_iter(
-	accu_in: {prev_elt : int;
+	accu_in:tri::sorted_iter_accu {prev_elt : int;
 	prop_is_tt : bool};
 	elt:int) 
 returns (
-	accu_out: {prev_elt : int;
+	accu_out:tri::sorted_iter_accu {prev_elt : int;
 	prop_is_tt : bool});
 let
     accu_out = sorted_iter_accu{prev_elt=elt;prop_is_tt=((accu_in.prev_elt <=
@@ -11360,7 +12445,7 @@ tel
 -- end of node tri__sorted_iter
 node tri__Sorted(TIn:int^10) returns (res:bool);
 var
-   accu_out: {prev_elt : int; prop_is_tt : bool};
+   accu_out:tri::sorted_iter_accu {prev_elt : int; prop_is_tt : bool};
    TSorted:int^10;
 let
    TSorted = tri__main(TIn);
@@ -11452,17 +12537,17 @@ tel
 	Exported types:
 	Exported constants:
 	Exported nodes:
-type inter__selType =  {i : int; b : bool; r : real};
+type inter__selType = inter::selType {i : int; b : bool; r : real};
 
 node inter__preced(
-	in: {i : int;
+	in:inter::selType {i : int;
 	b : bool;
 	r : real}) 
 returns (
-	out: {i : int;
+	out:inter::selType {i : int;
 	b : bool;
 	r : real};
-	out2: {i : int;
+	out2:inter::selType {i : int;
 	b : bool;
 	r : real});
 let
@@ -11559,20 +12644,20 @@ tel
 -- end of node pint__fby1
  * package inter
 	Exported types:
-type inter__selType =  {i : int; b : bool; r : real};
+type inter__selType = inter::selType {i : int; b : bool; r : real};
 	Exported constants:
 const inter__n = -4;
 	Exported nodes:
 
 node inter__preced(
-	in: {i : int;
+	in:inter::selType {i : int;
 	b : bool;
 	r : real}) 
 returns (
-	out: {i : int;
+	out:inter::selType {i : int;
 	b : bool;
 	r : real};
-	out2: {i : int;
+	out2:inter::selType {i : int;
 	b : bool;
 	r : real});
 let
@@ -12133,12 +13218,12 @@ End of Syntax table dump. 
  * package def
 	Exported types:
 type def__int4 = int^4;
-type def__st =  {x : int^4};
+type def__st = def::st {x : int^4};
 	Exported constants:
 	Exported nodes:
-node def__def(a:bool) returns (b: {x : int^4});
+node def__def(a:bool) returns (b:def::st {x : int^4});
 var
-   c: {x : int^4};
+   c:def::st {x : int^4};
 let
    b.[0] = c.x[0];
    b.[1] = c.x[0];
-- 
GitLab