@@ -3214,13 +3214,16 @@ algorithm
32143214 list< BackendDAE . Var > varA,statescandidates,ovars,varJ;
32153215 list< BackendDAE . Equation > eqns,oeqns;
32163216 BackendVarTransform . VariableReplacements repl;
3217+ HashSet . HashSet hs;
32173218 Boolean b,b1;
32183219 case ({},_,_,_,_,_) then (listReverse(iAcc),inB,iStatesetrepl);
32193220 case (BackendDAE . STATESET (rang,states,crA,varA,statescandidates,ovars,eqns,oeqns,crJ,varJ)::stateSets,_,_,_,_,_)
32203221 equation
32213222 repl = getAliasReplacements(iStatesetrepl,aliasVars);
32223223 // do not replace the set variables
3223- ovars = replaceOtherStateSetVars(ovars,vars,aliasVars,{});
3224+ hs = HashSet . emptyHashSet();
3225+ hs = List . fold(List . map(statescandidates,BackendVariable . varCref),BaseHashSet . add,hs);
3226+ ovars = replaceOtherStateSetVars(ovars,vars,aliasVars,hs,{});
32243227 (eqns,b) = BackendVarTransform . replaceEquations(eqns,repl,SOME (BackendVarTransform . skipPreChangeEdgeOperator));
32253228 (oeqns,b1) = BackendVarTransform . replaceEquations(oeqns,repl,SOME (BackendVarTransform . skipPreChangeEdgeOperator));
32263229 oeqns = List . fold(oeqns,removeEqualLshRshEqns,{});
@@ -3266,29 +3269,40 @@ protected function replaceOtherStateSetVars
32663269 author: Frenkel TUD 2012-12"
32673270 input list< BackendDAE . Var > iVarLst;
32683271 input BackendDAE . Variables vars;
3269- input BackendDAE . Variables aliasVars;
3272+ input BackendDAE . Variables aliasVars;
3273+ input HashSet . HashSet hs;
32703274 input list< BackendDAE . Var > iAcc;
32713275 output list< BackendDAE . Var > oVarLst;
32723276algorithm
3273- oVarLst := matchcontinue(iVarLst,vars,aliasVars,iAcc)
3277+ oVarLst := matchcontinue(iVarLst,vars,aliasVars,hs, iAcc)
32743278 local
32753279 BackendDAE . Var var ;
32763280 list< BackendDAE . Var > varlst;
32773281 DAE . ComponentRef cr;
32783282 DAE . Exp exp;
3279- case ({},_,_,_) then iAcc;
3280- case (var ::varlst,_,_,_)
3283+ Boolean b;
3284+ case ({},_,_,_,_) then iAcc;
3285+ case (var ::varlst,_,_,_,_)
32813286 equation
32823287 cr = BackendVariable . varCref(var );
3288+ false = BaseHashSet . has(cr,hs);
32833289 ({var },_) = BackendVariable . getVar(cr,aliasVars);
32843290 exp = BackendVariable . varBindExp(var );
32853291 cr::{} = Expression . extractCrefsFromExp(exp);
3292+ b = BaseHashSet . has(cr,hs);
32863293 ({var },_) = BackendVariable . getVar(cr,vars);
3294+ varlst = List . consOnTrue(not b, var , iAcc);
3295+ then
3296+ replaceOtherStateSetVars(varlst,vars,aliasVars,hs,varlst);
3297+ case (var ::varlst,_,_,_,_)
3298+ equation
3299+ cr = BackendVariable . varCref(var );
3300+ true = BaseHashSet . has(cr,hs);
32873301 then
3288- replaceOtherStateSetVars(varlst,vars,aliasVars,var :: iAcc);
3289- case (var ::varlst,_,_,_)
3302+ replaceOtherStateSetVars(varlst,vars,aliasVars,hs, iAcc);
3303+ case (var ::varlst,_,_,_,_ )
32903304 then
3291- replaceOtherStateSetVars(varlst,vars,aliasVars,var ::iAcc);
3305+ replaceOtherStateSetVars(varlst,vars,aliasVars,hs, var ::iAcc);
32923306 end matchcontinue;
32933307end replaceOtherStateSetVars;
32943308
0 commit comments