@Override public void replaceExpression(Expression old, Expression newExpression) { if (variable == old && newExpression instanceof Variable) { variable = (Variable) newExpression; } if (value == old) { value = newExpression; } else { // recursively try to replace expression value.replaceExpression(old, newExpression); } }
@Override public void replaceExpression(Expression old, Expression newExpression) { if (expression == old) { expression = newExpression; } else { expression.replaceExpression(old, newExpression); } }
@Override public void replaceExpression(Expression old, Expression newExpression) { if (old == operand) { operand = newExpression; } else { operand.replaceExpression(old, newExpression); } }
@Override public void replaceExpression(Expression old, Expression newExpression) { for (int i = 0; i < args.size(); i++) { Expression arg = args.get(i); if (arg == old) { args.set(i, newExpression); } else { arg.replaceExpression(old, newExpression); } } }
left = newExpression; } else if (left.isComposite()) { left.replaceExpression(old, newExpression); right = newExpression; } else if (right.isComposite()) { right.replaceExpression(old, newExpression);
@Override public void replaceExpression(Expression old, Expression newExpression) { if (condition == old) { condition = newExpression; } else { condition.replaceExpression(old, newExpression); } replaceSubtree(positive, old, newExpression); if (negative != null) { replaceSubtree(negative, old, newExpression); } }
/** * Performs constant propagtion on an expression and returns the result expression * @param expression the expression for constant propagtion * @return the result expression, where constant variables are constant */ private Expression performConstantPropagationOnExpression(Expression expression) { dfgVisitorUsedVariables.getVariables().clear(); expression.accept(dfgVisitorUsedVariables); for (VariableComponent varComp : dfgVisitorUsedVariables.getVariables()) { if (mapConstants.containsKey(varComp)) { // replace variable with constant if (expression == varComp.getReferredExpression()) { expression = mapConstants.get(varComp); } else { expression.replaceExpression(varComp.getReferredExpression(), mapConstants.get(varComp)); } setGraphModified(); } } // do a constant folding on the value expression.accept(constantFolding); if (constantFolding.isGraphModified()) { setGraphModified(); } return constantFolding.getResultExpr(); }