diff --git a/prism/src/param/ParamModelChecker.java b/prism/src/param/ParamModelChecker.java index 1451a3f0..2b1d85f5 100644 --- a/prism/src/param/ParamModelChecker.java +++ b/prism/src/param/ParamModelChecker.java @@ -383,9 +383,9 @@ final public class ParamModelChecker extends PrismComponent return res; } - private RegionValues checkExpressionAtomic(ParamModel model, - Expression expr, BitSet needStates) throws PrismException { - expr = (Expression) expr.replaceConstants(constantValues); + private RegionValues checkExpressionAtomic(ParamModel model, Expression expr, BitSet needStates) throws PrismException + { + expr = (Expression) expr.deepCopy().replaceConstants(constantValues); int numStates = model.getNumStates(); List statesList = model.getStatesList(); @@ -395,7 +395,7 @@ final public class ParamModelChecker extends PrismComponent varMap[var] = var; } for (int state = 0; state < numStates; state++) { - Expression exprVar = (Expression) expr.evaluatePartially(statesList.get(state), varMap); + Expression exprVar = (Expression) expr.deepCopy().evaluatePartially(statesList.get(state), varMap); if (needStates.get(state)) { if (exprVar instanceof ExpressionLiteral) { ExpressionLiteral exprLit = (ExpressionLiteral) exprVar; @@ -1048,7 +1048,7 @@ final public class ParamModelChecker extends PrismComponent int numRewItems = rewStruct.getNumItems(); for (int rewItem = 0; rewItem < numRewItems; rewItem++) { Expression expr = rewStruct.getReward(rewItem); - expr = (Expression) expr.replaceConstants(constantValues); + expr = (Expression) expr.deepCopy().replaceConstants(constantValues); Expression guard = rewStruct.getStates(rewItem); String action = rewStruct.getSynch(rewItem); boolean isTransitionReward = rewStruct.getRewardStructItem(rewItem).isTransitionReward(); @@ -1058,7 +1058,7 @@ final public class ParamModelChecker extends PrismComponent for (int i = 0; i < varMap.length; i++) { varMap[i] = i; } - Expression exprState = (Expression) expr.evaluatePartially(statesList.get(state), varMap); + Expression exprState = (Expression) expr.deepCopy().evaluatePartially(statesList.get(state), varMap); Function newReward = modelBuilder.expr2function(functionFactory, exprState); for (int choice = model.stateBegin(state); choice < model.stateEnd(state); choice++) { Function sumOut = model.sumLeaving(choice);