diff --git a/src/split.ml b/src/split.ml index 8bc4d349d13c7e78ccf1d79b425dcd9f0594c76b..a504c375a75aeed62c41709cba94e3c2a40149d8 100644 --- a/src/split.ml +++ b/src/split.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 20/11/2008 (at 10:47) by Erwan Jahier> *) +(** Time-stamp: <modified the 20/11/2008 (at 14:32) by Erwan Jahier> *) open Lxm @@ -143,6 +143,7 @@ and (split_val_exp : bool -> Eff.local_env -> Eff.val_exp -> Eff.val_exp * split -> ve, ([],[]) | CallByNameEff (by_name_op_eff, fl) -> + let lxm = by_name_op_eff.src in let fl, eql, vl = List.fold_left (fun (fl_acc, eql_acc, vl_acc) (fn, fv) -> @@ -152,8 +153,26 @@ and (split_val_exp : bool -> Eff.local_env -> Eff.val_exp -> Eff.val_exp * split ([],[],[]) fl in - CallByNameEff (by_name_op_eff, List.rev fl), (eql, vl) + let rhs = CallByNameEff (by_name_op_eff, List.rev fl) in + if top_level then + rhs, (eql, vl) + else + (* create the var for the current call *) + let clk_l = EvalClock.get_val_exp_eff ve in + let typ_l = EvalType.val_exp_eff ve in + let nv_l = List.map2 (new_var node_env) typ_l clk_l in + let nve = match nv_l with + | [nv] -> CallByPosEff( + Lxm.flagit (Eff.IDENT (Ident.to_idref nv.var_name_eff)) lxm, + OperEff [] + ) + | _ -> assert false + in + let lpl = List.map (fun nv -> LeftVarEff(nv, lxm)) nv_l in + let eq = Lxm.flagit (lpl, rhs) lxm in + nve, (eql@[eq], vl@nv_l) + | CallByPosEff(by_pos_op_eff, OperEff vel) -> (* recursively split the arguments *) diff --git a/src/test/test.res.exp b/src/test/test.res.exp index 967fb073adf0f9fce5d5c887f55137a49d28cb61..91d27f03ed5c37110f9d9ff4947edfd99eff7a33 100644 --- a/src/test/test.res.exp +++ b/src/test/test.res.exp @@ -8288,6 +8288,7 @@ type _left::truc = struct {a : A_bool_100; b : int}; node left::toto(x:bool) returns (t:A__left::truc_3); var _v1:A_bool_100; + _v2:_left::truc; let t[0].a[0 .. 98 step 2][48 .. 0 step -2] = true^25; t[0].a[0 .. 98 step 2][1 .. 49 step 2] = false^25; @@ -8295,8 +8296,9 @@ let t[0].a[1 .. 99 step 2][1] = true; t[0].a[5 .. 99 step 2] = false^48; t[0].b = 42; - t[1 .. 2] = _left::truc{a=_v1;b=0}^2; + t[1 .. 2] = _v2^2; _v1 = true^100; + _v2 = _left::truc{a=_v1;b=0}; tel -- end of node left::toto -- automatically defined aliases: @@ -10635,10 +10637,12 @@ returns ( tabToFillAfter:A__Gyroscope2::Valid_ChannelT_3); var acc_out:_Gyroscope2::CFF_Eltstruct; + _v1:_Gyroscope2::CFF_Eltstruct; let (acc_out, tabToFillAfter) = fillred<<Gyroscope2::addOneChannelIter, - 3>>(_Gyroscope2::CFF_Eltstruct{indx=0;indx_toChange=indx_toChange;value=channeltToAdd}, - tabToFill); + 3>>(_v1, tabToFill); + _v1 = + _Gyroscope2::CFF_Eltstruct{indx=0;indx_toChange=indx_toChange;value=channeltToAdd}; tel -- end of node Gyroscope2::addOneChannel @@ -10685,13 +10689,14 @@ var acc_out:_Gyroscope2::CFF_struct; localtabToFill:_Gyroscope2::Valid_ChannelT; _v1:A__Gyroscope2::Valid_ChannelT_3; + _v2:_Gyroscope2::CFF_struct; let localtabToFill = _Gyroscope2::Valid_ChannelT{local_failure=false;local_value=0.0}; - acc_out = red<<Gyroscope2::CFC_iter, - 4>>(_Gyroscope2::CFF_struct{indx=0;indx_toChange=currentChannelIndx;tabToFill=_v1}, - allChannels); + acc_out = red<<Gyroscope2::CFC_iter, 4>>(_v2, allChannels); _v1 = localtabToFill^3; + _v2 = + _Gyroscope2::CFF_struct{indx=0;indx_toChange=currentChannelIndx;tabToFill=_v1}; foreignChannels = acc_out.tabToFill; tel -- end of node Gyroscope2::ComputeForeignChannels @@ -11005,23 +11010,24 @@ var dumbChannel:A__Gyroscope2::Valid_ChannelT_4; initChannels:A__Gyroscope2::Valid_ChannelT_4; fillredInit:A__Gyroscope2::Valid_ChannelT_4; - _v1:A_int_4; - _v2:A_real_4; + _v1:_Gyroscope2::Valid_ChannelT; + _v2:A_int_4; _v3:A_real_4; _v4:A_real_4; - _v5:A__Gyroscope2::Valid_ChannelT_4; + _v5:A_real_4; + _v6:A__Gyroscope2::Valid_ChannelT_4; let - initChannels = - _Gyroscope2::Valid_ChannelT{local_failure=false;local_value=0.0}^4; + initChannels = _v1^4; + _v1 = _Gyroscope2::Valid_ChannelT{local_failure=false;local_value=0.0}; (dumbChannel, resChannels) = fillred<<Gyroscope2::Channel, - 4>>(fillredInit, _v1, channels, _v2, _v3, _v4); - _v1 = [0, 1, 2, 3]; - _v2 = delta^4; - _v3 = god^4; - _v4 = delta_to_god^4; + 4>>(fillredInit, _v2, channels, _v3, _v4, _v5); + _v2 = [0, 1, 2, 3]; + _v3 = delta^4; + _v4 = god^4; + _v5 = delta_to_god^4; AxisValue = Gyroscope2::Voter(resChannels, god, delta_to_god); - fillredInit = initChannels -> _v5; - _v5 = pre resChannels; + fillredInit = initChannels -> _v6; + _v6 = pre resChannels; tel -- end of node Gyroscope2::EvaluateAxis @@ -16161,9 +16167,10 @@ returns ( iselementof:bool); var acc_out:_produitBool::T_isElementOf_; + _v1:_produitBool::T_isElementOf_; let - acc_out = red<<produitBool::iterated_isElementOf_, - 10>>(_produitBool::T_isElementOf_{eltToSearch=e;iselementof=false}, t); + acc_out = red<<produitBool::iterated_isElementOf_, 10>>(_v1, t); + _v1 = _produitBool::T_isElementOf_{eltToSearch=e;iselementof=false}; iselementof = acc_out.iselementof; tel -- end of node produitBool::_isElementOf_ @@ -16204,11 +16211,12 @@ returns ( var iterationResult:_produitBool::iteratedStruct; _v1:bool; + _v2:_produitBool::iteratedStruct; let - iterationResult = red<<produitBool::selectOneStage, - 10>>(_produitBool::iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=_v1}, - array); + iterationResult = red<<produitBool::selectOneStage, 10>>(_v2, array); _v1 = array[0]; + _v2 = + _produitBool::iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=_v1}; elementSelected = iterationResult.elementSelected; tel -- end of node produitBool::selectElementOfRank_inArray_ @@ -16268,11 +16276,12 @@ var bidon:_produitBool::Tacc_inShift2; _v2:int; _v1:A_bool_10; + _v3:_produitBool::Tacc_inShift2; let - (bidon, ligne) = fill<<produitBool::shiftFill, - 20>>(_produitBool::Tacc_inShift2{multiplieur=_v1;rank=_v2;actual_rank=0}); + (bidon, ligne) = fill<<produitBool::shiftFill, 20>>(_v3); _v2 = acc_in.rank; _v1 = acc_in.multiplieur; + _v3 = _produitBool::Tacc_inShift2{multiplieur=_v1;rank=_v2;actual_rank=0}; tel -- end of node produitBool::shift @@ -16364,11 +16373,13 @@ returns ( var v_iterationResult:_shiftFill_ludic::T3_STRUCT; _v1:bool; + _v2:_shiftFill_ludic::T3_STRUCT; let - v_iterationResult = red<<shiftFill_ludic::n_selectOneStage, - 10>>(_shiftFill_ludic::T3_STRUCT{currentRank=0;rankToSelect=i_rankToSelect;elementSelected=_v1}, + v_iterationResult = red<<shiftFill_ludic::n_selectOneStage, 10>>(_v2, i_array); _v1 = i_array[0]; + _v2 = + _shiftFill_ludic::T3_STRUCT{currentRank=0;rankToSelect=i_rankToSelect;elementSelected=_v1}; o_elementSelected = v_iterationResult.elementSelected; tel -- end of node shiftFill_ludic::n_selectElementOfRank_inArray_ @@ -16471,11 +16482,13 @@ returns ( var v_iterationResult:_shift_ludic::T4_STRUCT; _v1:bool; + _v2:_shift_ludic::T4_STRUCT; let - v_iterationResult = red<<shift_ludic::n_selectOneStage, - 10>>(_shift_ludic::T4_STRUCT{currentRank=0;rankToSelect=i_rankToSelect;elementSelected=_v1}, + v_iterationResult = red<<shift_ludic::n_selectOneStage, 10>>(_v2, i_array); _v1 = i_array[0]; + _v2 = + _shift_ludic::T4_STRUCT{currentRank=0;rankToSelect=i_rankToSelect;elementSelected=_v1}; o_elementSelected = v_iterationResult.elementSelected; tel -- end of node shift_ludic::n_selectElementOfRank_inArray_ @@ -16531,11 +16544,12 @@ var v_bidon:_shift_ludic::T2_STRUCT; _v2:int; _v1:A_bool_10; + _v3:_shift_ludic::T2_STRUCT; let - (v_bidon, o_ligne) = fill<<shift_ludic::n_shiftFill, - 20>>(_shift_ludic::T2_STRUCT{multiplieur=_v1;rank=_v2;actual_rank=0}); + (v_bidon, o_ligne) = fill<<shift_ludic::n_shiftFill, 20>>(_v3); _v2 = i_acc_in.rank; _v1 = i_acc_in.multiplieur; + _v3 = _shift_ludic::T2_STRUCT{multiplieur=_v1;rank=_v2;actual_rank=0}; tel -- end of node shift_ludic::n_shift -- automatically defined aliases: @@ -16715,26 +16729,27 @@ var _v5:int; _v4:int; _v3:int; - _v9:int; - _v10:bool; - _v11:int; - _v12:bool; + _v9:_calculs_max::struct_max; + _v10:int; + _v11:bool; + _v12:int; _v13:bool; - _v17:int; + _v14:bool; _v18:int; + _v19:int; + _v17:int; _v16:int; _v15:int; - _v14:int; - _v22:int; + _v20:_calculs_max::struct_max; + _v24:int; + _v25:int; _v23:int; + _v22:int; _v21:int; - _v20:int; - _v19:int; - _v24:_calculs_max::struct_max; + _v26:_calculs_max::struct_max; + _v27:_calculs_max::struct_max; let - strout = if _v2 then - _calculs_max::struct_max{max1=_v3;max2=_v4;imax1=_v5;imax2=_v6;icourant=_v8} - else _v24; + strout = if _v2 then _v9 else _v27; _v1 = strin.max2; _v2 = ecourant <= _v1; _v7 = strin.icourant; @@ -16743,25 +16758,28 @@ let _v5 = strin.imax1; _v4 = strin.max2; _v3 = strin.max1; - _v9 = strin.max2; - _v10 = ecourant > _v9; - _v11 = strin.max1; - _v12 = ecourant <= _v11; - _v13 = _v10 and _v12; + _v9 = + _calculs_max::struct_max{max1=_v3;max2=_v4;imax1=_v5;imax2=_v6;icourant=_v8}; + _v10 = strin.max2; + _v11 = ecourant > _v10; + _v12 = strin.max1; + _v13 = ecourant <= _v12; + _v14 = _v11 and _v13; + _v18 = strin.icourant; + _v19 = _v18 + 1; _v17 = strin.icourant; - _v18 = _v17 + 1; - _v16 = strin.icourant; - _v15 = strin.imax1; - _v14 = strin.max1; + _v16 = strin.imax1; + _v15 = strin.max1; + _v20 = + _calculs_max::struct_max{max1=_v15;max2=ecourant;imax1=_v16;imax2=_v17;icourant=_v19}; + _v24 = strin.icourant; + _v25 = _v24 + 1; + _v23 = strin.imax1; _v22 = strin.icourant; - _v23 = _v22 + 1; - _v21 = strin.imax1; - _v20 = strin.icourant; - _v19 = strin.max1; - _v24 = if _v13 then - _calculs_max::struct_max{max1=_v14;max2=ecourant;imax1=_v15;imax2=_v16;icourant=_v18} - else - _calculs_max::struct_max{max1=ecourant;max2=_v19;imax1=_v20;imax2=_v21;icourant=_v23}; + _v21 = strin.max1; + _v26 = + _calculs_max::struct_max{max1=ecourant;max2=_v21;imax1=_v22;imax2=_v23;icourant=_v25}; + _v27 = if _v14 then _v20 else _v26; tel -- end of node calculs_max::max @@ -16802,18 +16820,20 @@ var tmp:_calculs_max::struct_fill_bool; _v2:int; _v1:int; + _v3:_calculs_max::struct_max; + _v5:int; _v4:int; - _v3:int; + _v6:_calculs_max::struct_fill_bool; let - local_struct = red<<calculs_max::max, - 10>>(_calculs_max::struct_max{max1=0;max2=0;imax1=_v1;imax2=_v2;icourant=0}, - A); + local_struct = red<<calculs_max::max, 10>>(_v3, A); _v2 = -1; _v1 = -1; - (tmp, res) = fill<<calculs_max::fill_bool, - 10>>(_calculs_max::struct_fill_bool{imax1=_v3;imax2=_v4;icourant=0}); - _v4 = local_struct.imax2; - _v3 = local_struct.imax1; + _v3 = + _calculs_max::struct_max{max1=0;max2=0;imax1=_v1;imax2=_v2;icourant=0}; + (tmp, res) = fill<<calculs_max::fill_bool, 10>>(_v6); + _v5 = local_struct.imax2; + _v4 = local_struct.imax1; + _v6 = _calculs_max::struct_fill_bool{imax1=_v4;imax2=_v5;icourant=0}; tel -- end of node calculs_max::calculs_max -- automatically defined aliases: @@ -16882,9 +16902,10 @@ returns ( acknowledge:A_bool_10); var accu_out:_deSimone::cell_accu; + _v1:_deSimone::cell_accu; let - (accu_out, acknowledge) = fillred<<deSimone::oneCell, - 10>>(_deSimone::cell_accu{token=new_token;grant=true}, request); + (accu_out, acknowledge) = fillred<<deSimone::oneCell, 10>>(_v1, request); + _v1 = _deSimone::cell_accu{token=new_token;grant=true}; tel -- end of node deSimone::deSimone node deSimone::prop1(request:A_bool_10) returns (ok:bool); @@ -17188,9 +17209,10 @@ tel node moyenne::moyenne(Tab:A_real_10) returns (moy:real); var accu_out:_moyenne::moyenne_accu; + _v1:_moyenne::moyenne_accu; let - accu_out = red<<moyenne::moyenne_step, - 10>>(_moyenne::moyenne_accu{sum=0.0;moyenne=0.0;rank=0.0}, Tab); + accu_out = red<<moyenne::moyenne_step, 10>>(_v1, Tab); + _v1 = _moyenne::moyenne_accu{sum=0.0;moyenne=0.0;rank=0.0}; moy = accu_out.moyenne; tel -- end of node moyenne::moyenne @@ -18299,44 +18321,49 @@ var accu_out_exchange:_triSel::Exchange_accu; localTab:A_int_50; _v1:int; - _v2:A_int_50; - _v3:int; - _v4:A_int_50; + _v2:_triSel::MinFR_accu; + _v3:A_int_50; + _v4:int; + _v5:_triSel::Select_accu; + _v6:A_int_50; + _v10:int; + _v9:int; _v8:int; _v7:int; - _v6:int; - _v5:int; - _v9:A_int_50; - _v10:int; - _v11:int; + _v11:_triSel::Exchange_accu; + _v12:A_int_50; + _v13:int; + _v14:int; let - accu_out_min = red<<triSel::minFromRank, - 50>>(_triSel::MinFR_accu{MinVal=0;MinRank=0;RankFrom=_v1;Rank=0}, _v2); + accu_out_min = red<<triSel::minFromRank, 50>>(_v2, _v3); _v1 = accu_in.CurrentRank; - _v2 = accu_in.Tab; - accu_out_select = red<<triSel::select, - 50>>(_triSel::Select_accu{RankToFind=_v3;CurrentRank=0;Val=0}, _v4); - _v3 = accu_in.CurrentRank; - _v4 = accu_in.Tab; - (accu_out_exchange, localTab) = fillred<<triSel::Exchange_i_j, - 50>>(_triSel::Exchange_accu{MinVal=_v5;MinRank=_v6;RankFrom=_v7;CurrentVal=_v8;Rank=0}, - _v9); - _v8 = accu_out_select.Val; - _v7 = accu_out_select.RankToFind; - _v6 = accu_out_min.MinRank; - _v5 = accu_out_min.MinVal; - _v9 = accu_in.Tab; - accu_out = _triSel::Sort_accu{CurrentRank=_v11;Tab=localTab}; - _v10 = accu_in.CurrentRank; - _v11 = _v10 + 1; + _v2 = _triSel::MinFR_accu{MinVal=0;MinRank=0;RankFrom=_v1;Rank=0}; + _v3 = accu_in.Tab; + accu_out_select = red<<triSel::select, 50>>(_v5, _v6); + _v4 = accu_in.CurrentRank; + _v5 = _triSel::Select_accu{RankToFind=_v4;CurrentRank=0;Val=0}; + _v6 = accu_in.Tab; + (accu_out_exchange, localTab) = fillred<<triSel::Exchange_i_j, 50>>(_v11, + _v12); + _v10 = accu_out_select.Val; + _v9 = accu_out_select.RankToFind; + _v8 = accu_out_min.MinRank; + _v7 = accu_out_min.MinVal; + _v11 = + _triSel::Exchange_accu{MinVal=_v7;MinRank=_v8;RankFrom=_v9;CurrentVal=_v10;Rank=0}; + _v12 = accu_in.Tab; + accu_out = _triSel::Sort_accu{CurrentRank=_v14;Tab=localTab}; + _v13 = accu_in.CurrentRank; + _v14 = _v13 + 1; tel -- end of node triSel::UnarySort node triSel::triSel(TIn:A_int_50) returns (TSorted:A_int_50); var UnarySort_accu_out:_triSel::Sort_accu; + _v1:_triSel::Sort_accu; let - UnarySort_accu_out = red<<triSel::UnarySort, - 50>>(_triSel::Sort_accu{CurrentRank=0;Tab=TIn}, TIn); + UnarySort_accu_out = red<<triSel::UnarySort, 50>>(_v1, TIn); + _v1 = _triSel::Sort_accu{CurrentRank=0;Tab=TIn}; TSorted = UnarySort_accu_out.Tab; tel -- end of node triSel::triSel @@ -18363,10 +18390,11 @@ node triSel::Sorted(TIn:A_int_50) returns (ok:bool); var accu_out:_triSel::sorted_iter_accu; TSorted:A_int_50; + _v1:_triSel::sorted_iter_accu; let TSorted = triSel::triSel(TIn); - accu_out = red<<triSel::sorted_iter, - 50>>(_triSel::sorted_iter_accu{prev_elt=0;prop_is_tt=true}, TSorted); + accu_out = red<<triSel::sorted_iter, 50>>(_v1, TSorted); + _v1 = _triSel::sorted_iter_accu{prev_elt=0;prop_is_tt=true}; ok = accu_out.prop_is_tt; tel -- end of node triSel::Sorted @@ -18461,10 +18489,12 @@ returns ( elementSelected:int); var iterationResult:_contractForElementSelectionInArray::iteratedStruct; + _v1:_contractForElementSelectionInArray::iteratedStruct; let iterationResult = red<<contractForElementSelectionInArray::selectOneStage, - 10>>(_contractForElementSelectionInArray::iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=0}, - array); + 10>>(_v1, array); + _v1 = + _contractForElementSelectionInArray::iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=0}; elementSelected = iterationResult.elementSelected; tel -- end of node contractForElementSelectionInArray::selectEltInArray @@ -18523,9 +18553,10 @@ returns ( iselementof:bool); var acc_out:_intArray::T_isElementOf_; + _v1:_intArray::T_isElementOf_; let - acc_out = red<<intArray::iterated_isElementOf_, - 10>>(_intArray::T_isElementOf_{eltToSearch=e;iselementof=false}, t); + acc_out = red<<intArray::iterated_isElementOf_, 10>>(_v1, t); + _v1 = _intArray::T_isElementOf_{eltToSearch=e;iselementof=false}; iselementof = acc_out.iselementof; tel -- end of node intArray::_isElementOf_ @@ -18568,11 +18599,11 @@ returns ( var result:_intArray::forSortingAlgo; _v1:int; + _v2:_intArray::forSortingAlgo; let - result = red<<intArray::isLocallyLoselySorted, - 10>>(_intArray::forSortingAlgo{previousElement=_v1;sortedUpToHere=true}, - array); + result = red<<intArray::isLocallyLoselySorted, 10>>(_v2, array); _v1 = array[0]; + _v2 = _intArray::forSortingAlgo{previousElement=_v1;sortedUpToHere=true}; array_isLoselySorted = result.sortedUpToHere; tel -- end of node intArray::_isLoselySorted @@ -18728,45 +18759,50 @@ var localTab:A_int_10; _v2:int; _v1:int; - _v3:A_int_10; - _v4:int; - _v5:A_int_10; + _v3:_intArray::MinFR_accu; + _v4:A_int_10; + _v5:int; + _v6:_intArray::Select_accu; + _v7:A_int_10; + _v11:int; + _v10:int; _v9:int; _v8:int; - _v7:int; - _v6:int; - _v10:A_int_10; - _v11:int; - _v12:int; + _v12:_intArray::Exchange_accu; + _v13:A_int_10; + _v14:int; + _v15:int; let - accu_out_min = red<<intArray::minFromRank, - 10>>(_intArray::MinFR_accu{MinVal=0;MinRank=_v1;RankFrom=_v2;Rank=0}, _v3); + accu_out_min = red<<intArray::minFromRank, 10>>(_v3, _v4); _v2 = accu_in.CurrentRank; _v1 = accu_in.CurrentRank; - _v3 = accu_in.Tab; - accu_out_select = red<<intArray::select, - 10>>(_intArray::Select_accu{RankToFind=_v4;CurrentRank=0;Val=0}, _v5); - _v4 = accu_in.CurrentRank; - _v5 = accu_in.Tab; + _v3 = _intArray::MinFR_accu{MinVal=0;MinRank=_v1;RankFrom=_v2;Rank=0}; + _v4 = accu_in.Tab; + accu_out_select = red<<intArray::select, 10>>(_v6, _v7); + _v5 = accu_in.CurrentRank; + _v6 = _intArray::Select_accu{RankToFind=_v5;CurrentRank=0;Val=0}; + _v7 = accu_in.Tab; (accu_out_exchange, localTab) = fillred<<intArray::Exchange_i_j, - 10>>(_intArray::Exchange_accu{MinVal=_v6;MinRank=_v7;RankFrom=_v8;CurrentVal=_v9;Rank=0}, - _v10); - _v9 = accu_out_select.Val; - _v8 = accu_out_select.RankToFind; - _v7 = accu_out_min.MinRank; - _v6 = accu_out_min.MinVal; - _v10 = accu_in.Tab; - accu_out = _intArray::Sort_accu{CurrentRank=_v12;Tab=localTab}; - _v11 = accu_in.CurrentRank; - _v12 = _v11 + 1; + 10>>(_v12, _v13); + _v11 = accu_out_select.Val; + _v10 = accu_out_select.RankToFind; + _v9 = accu_out_min.MinRank; + _v8 = accu_out_min.MinVal; + _v12 = + _intArray::Exchange_accu{MinVal=_v8;MinRank=_v9;RankFrom=_v10;CurrentVal=_v11;Rank=0}; + _v13 = accu_in.Tab; + accu_out = _intArray::Sort_accu{CurrentRank=_v15;Tab=localTab}; + _v14 = accu_in.CurrentRank; + _v15 = _v14 + 1; tel -- end of node intArray::UnarySort node intArray::sort_(array:A_int_10) returns (arraySorted:A_int_10); var UnarySort_accu_out:_intArray::Sort_accu; + _v1:_intArray::Sort_accu; let - UnarySort_accu_out = red<<intArray::UnarySort, - 10>>(_intArray::Sort_accu{CurrentRank=0;Tab=array}, array); + UnarySort_accu_out = red<<intArray::UnarySort, 10>>(_v1, array); + _v1 = _intArray::Sort_accu{CurrentRank=0;Tab=array}; arraySorted = UnarySort_accu_out.Tab; tel -- end of node intArray::sort_ @@ -18828,11 +18864,12 @@ returns ( var iterationResult:_intArray::iteratedStruct; _v1:int; + _v2:_intArray::iteratedStruct; let - iterationResult = red<<intArray::selectOneStage, - 10>>(_intArray::iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=_v1}, - array); + iterationResult = red<<intArray::selectOneStage, 10>>(_v2, array); _v1 = array[0]; + _v2 = + _intArray::iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=_v1}; elementSelected = iterationResult.elementSelected; tel -- end of node intArray::selectElementOfRank_inArray_ @@ -18899,11 +18936,12 @@ returns ( var local:_intArray::currentRank_withMemorizedRank; _v1:int; + _v2:_intArray::currentRank_withMemorizedRank; let - local = red<<intArray::selectMaxRank, - 10>>(_intArray::currentRank_withMemorizedRank{currentRank=0;rankOfMemorizedVal=0;memorizedVal=_v1}, - array); + local = red<<intArray::selectMaxRank, 10>>(_v2, array); _v1 = array[0]; + _v2 = + _intArray::currentRank_withMemorizedRank{currentRank=0;rankOfMemorizedVal=0;memorizedVal=_v1}; rankOfMaximumElement = local.rankOfMemorizedVal; tel -- end of node intArray::getRank_ofMaximumIn_ @@ -18943,12 +18981,13 @@ returns ( var minElement:int; _v1:_intArray::currentRank_withMemorizedRank; + _v2:_intArray::currentRank_withMemorizedRank; let minElement = intArray::getMinimumIn_(array); - rankOfMinimumElement = _v1.rankOfMemorizedVal; - _v1 = red<<intArray::selectMinRank, - 10>>(_intArray::currentRank_withMemorizedRank{currentRank=0;rankOfMemorizedVal=0;memorizedVal=minElement}, - array); + rankOfMinimumElement = _v2.rankOfMemorizedVal; + _v1 = + _intArray::currentRank_withMemorizedRank{currentRank=0;rankOfMemorizedVal=0;memorizedVal=minElement}; + _v2 = red<<intArray::selectMinRank, 10>>(_v1, array); tel -- end of node intArray::getRank_ofMinimumIn_ @@ -19149,49 +19188,54 @@ var localTab:A_int_10; _v2:int; _v1:int; - _v3:A_int_10; - _v4:int; - _v5:A_int_10; + _v3:_tri::MinFR_accu; + _v4:A_int_10; + _v5:int; + _v6:_tri::Select_accu; + _v7:A_int_10; + _v11:int; + _v10:int; _v9:int; _v8:int; - _v7:int; - _v6:int; - _v10:A_int_10; - _v11:int; - _v12:int; + _v12:_tri::Exchange_accu; + _v13:A_int_10; + _v14:int; + _v15:int; let - accu_out_min = red<<tri::minFromRank, - 10>>(_tri::MinFR_accu{MinVal=0;MinRank=_v1;RankFrom=_v2;Rank=0}, _v3); + accu_out_min = red<<tri::minFromRank, 10>>(_v3, _v4); _v2 = accu_in.CurrentRank; _v1 = accu_in.CurrentRank; - _v3 = accu_in.Tab; - accu_out_select = red<<tri::select, - 10>>(_tri::Select_accu{RankToFind=_v4;CurrentRank=0;Val=0}, _v5); - _v4 = accu_in.CurrentRank; - _v5 = accu_in.Tab; - (accu_out_exchange, localTab) = fillred<<tri::Exchange_i_j, - 10>>(_tri::Exchange_accu{MinVal=_v6;MinRank=_v7;RankFrom=_v8;CurrentVal=_v9;Rank=0}, - _v10); - _v9 = accu_out_select.Val; - _v8 = accu_out_select.RankToFind; - _v7 = accu_out_min.MinRank; - _v6 = accu_out_min.MinVal; - _v10 = accu_in.Tab; - accu_out = _tri::Sort_accu{CurrentRank=_v12;Tab=localTab}; - _v11 = accu_in.CurrentRank; - _v12 = _v11 + 1; + _v3 = _tri::MinFR_accu{MinVal=0;MinRank=_v1;RankFrom=_v2;Rank=0}; + _v4 = accu_in.Tab; + accu_out_select = red<<tri::select, 10>>(_v6, _v7); + _v5 = accu_in.CurrentRank; + _v6 = _tri::Select_accu{RankToFind=_v5;CurrentRank=0;Val=0}; + _v7 = accu_in.Tab; + (accu_out_exchange, localTab) = fillred<<tri::Exchange_i_j, 10>>(_v12, + _v13); + _v11 = accu_out_select.Val; + _v10 = accu_out_select.RankToFind; + _v9 = accu_out_min.MinRank; + _v8 = accu_out_min.MinVal; + _v12 = + _tri::Exchange_accu{MinVal=_v8;MinRank=_v9;RankFrom=_v10;CurrentVal=_v11;Rank=0}; + _v13 = accu_in.Tab; + accu_out = _tri::Sort_accu{CurrentRank=_v15;Tab=localTab}; + _v14 = accu_in.CurrentRank; + _v15 = _v14 + 1; tel -- end of node tri::UnarySort node tri::main(TIn:A_int_10) returns (TSorted:A_int_10); var UnarySort_accu_out:_tri::Sort_accu; _v1:A_int_10; - _v2:A_int_10; + _v2:_tri::Sort_accu; + _v3:A_int_10; let - UnarySort_accu_out = red<<tri::UnarySort, - 10>>(_tri::Sort_accu{CurrentRank=0;Tab=_v1}, _v2); + UnarySort_accu_out = red<<tri::UnarySort, 10>>(_v2, _v3); _v1 = [7, 8, 4, 3, 2, 9, 1, 10, 2, 7]; - _v2 = [7, 8, 4, 3, 2, 9, 1, 10, 2, 7]; + _v2 = _tri::Sort_accu{CurrentRank=0;Tab=_v1}; + _v3 = [7, 8, 4, 3, 2, 9, 1, 10, 2, 7]; TSorted = UnarySort_accu_out.Tab; tel -- end of node tri::main @@ -19218,10 +19262,11 @@ node tri::Sorted(TIn:A_int_10) returns (res:bool); var accu_out:_tri::sorted_iter_accu; TSorted:A_int_10; + _v1:_tri::sorted_iter_accu; let TSorted = tri::main(TIn); - accu_out = red<<tri::sorted_iter, - 10>>(_tri::sorted_iter_accu{prev_elt=0;prop_is_tt=true}, TSorted); + accu_out = red<<tri::sorted_iter, 10>>(_v1, TSorted); + _v1 = _tri::sorted_iter_accu{prev_elt=0;prop_is_tt=true}; res = accu_out.prop_is_tt; tel -- end of node tri::Sorted