diff --git a/src/compiledDataDump.ml b/src/compiledDataDump.ml index db0ef21c64d922ab8d4a54a3441e7c232def5920..f86ffda2371866271a30ead6b2b04d418a286378 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 56dad0e15c705897789b1334e57736e4d36cac6e..7f6bee08c11ed03e27748353969fd56fd4dd1904 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 b65fa84b6290f94e9ad1077c21797425f7e659c1..d3b1e26dfc8417a9db1ef3c6df0eec57ad737a5e 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 09786067563b4ed00226299c7887ad65a5907278..af7dbdafe15aadb3aeb35c546cf1d297053cb240 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 0c7ec2622e1713f63eaa62d86c266a013232290e..2f584f7c41ad6379612538c66ef32b38ac6360d6 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 a6f80e8d790b2fbfd93a2aceb7b26e9ad0ff6272..31428ce4cd7cb0bf94b4fd17619931aec1f65591 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 0b76a7856678d42c59c47094d4a390918c96922a..3935b14b7363264b6bd33c95632fe19360794bc5 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 bb117d4958a085a63bb3e2618133d960a28f0125..08b24096128a4c7f13f811ffd44336d63872045b 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 27fe7f8dabd3238094f5e13c8066cbf8e49d6e6a..25eb6e9bd524fb4a1065662898fa5bbd2e9e0e0c 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 f677b55dc64004d8c2b0e39afd96d5ad192385ac..e859e9c9fff67d6116f9186c8ea82c8884ef4fd4 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 168c8995e18cb25629f8fe63356697861741431d..4a73558e30535a768d773fb3575af3b80b35aee1 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 caf37e2761854a05609921826c3cf33e6f5e03d4..2c5430feb07cdb076bc3b6eaff0fd423de12b152 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 ae7cad1fbe93d0b7da57928b7ab78984ad662890..e07278293f530ab0b0db6a53121ddcc2bc4126fa 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 2ad271f2be74f42dd95b5886c35e4f5e207c9db5..5e431672d91c31197ef64449c9b63505b7711d60 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 c6b0c78f45fd2376ec25cfd3508dcbfc8f407121..fd16e1c63761cc6f5a698b6ad8051d802feecb1d 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 9f35e81114b5dad3462eace9d5428fcd95418da1..8d1c865aaa6bcc62b351dea7cecb5aa1b5f00e5f 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 785a165030e77ab195bc4ecae59184ef55f88bdc..22bab6dbccf3f635aac4c806641f1409317caf1e 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];