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