/**
*
*/
package soottocfg.cfg.expression;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import soottocfg.cfg.SourceLocation;
import soottocfg.cfg.type.Type;
import soottocfg.cfg.variable.Variable;
/**
* @author schaef
*
*/
public class IteExpression extends Expression {
private static final long serialVersionUID = -7138261822713810587L;
private Expression condition, thenExpr, elseExpr;
public Expression getCondition() {
return condition;
}
public Expression getThenExpr() {
return thenExpr;
}
public Expression getElseExpr() {
return elseExpr;
}
public IteExpression(SourceLocation loc, Expression condition, Expression thenExpr, Expression elseExpr) {
super(loc);
this.condition = condition;
this.thenExpr = thenExpr;
this.elseExpr = elseExpr;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("(");
sb.append(this.condition);
sb.append("?");
sb.append(this.thenExpr);
sb.append(":");
sb.append(this.elseExpr);
sb.append(")");
return sb.toString();
}
@Override
public Set<IdentifierExpression> getUseIdentifierExpressions() {
Set<IdentifierExpression> ret = new HashSet<IdentifierExpression>();
ret.addAll(condition.getUseIdentifierExpressions());
ret.addAll(thenExpr.getUseIdentifierExpressions());
ret.addAll(elseExpr.getUseIdentifierExpressions());
return ret;
}
@Override
public Set<Variable> getDefVariables() {
// because this can't happen on the left.
Set<Variable> used = new HashSet<Variable>();
return used;
}
@Override
public Type getType() {
assert (thenExpr.getType().equals(elseExpr.getType()));
return thenExpr.getType();
}
@Override
public IteExpression deepCopy() {
return new IteExpression(getSourceLocation(), condition.deepCopy(), thenExpr.deepCopy(), elseExpr.deepCopy());
}
@Override
public IteExpression substitute(Map<Variable, Variable> subs) {
return new IteExpression(getSourceLocation(), condition.substitute(subs), thenExpr.substitute(subs), elseExpr.substitute(subs));
}
@Override
public IteExpression substituteVarWithExpression(Map<Variable, Expression> subs) {
return new IteExpression(getSourceLocation(), condition.substituteVarWithExpression(subs), thenExpr.substituteVarWithExpression(subs), elseExpr.substituteVarWithExpression(subs));
}
}