package synthesijer.ast.expr;
import java.util.ArrayList;
import synthesijer.ast.Expr;
import synthesijer.ast.Scope;
import synthesijer.ast.Type;
import synthesijer.ast.Variable;
public class CondExpr extends Expr {
private Expr cond, truePart, falsePart;
public CondExpr(Scope scope) {
super(scope);
}
public void setCond(Expr cond){
this.cond = cond;
}
public Expr getCond(){
return this.cond;
}
public void setTruePart(Expr cond){
this.truePart = cond;
}
public Expr getTruePart(){
return this.truePart;
}
public void setFalsePart(Expr cond){
this.falsePart = cond;
}
public Expr getFalsePart(){
return this.falsePart;
}
@Override
public void accept(SynthesijerExprVisitor v) {
v.visitCondExpr(this);
}
@Override
public boolean isConstant() {
return false;
}
@Override
public boolean isVariable() {
return false;
}
@Override
public Type getType() {
return truePart.getType();
}
@Override
public Variable[] getSrcVariables() {
ArrayList<Variable> list = new ArrayList<Variable>();
for(Variable var: cond.getSrcVariables()) list.add(var);
for(Variable var: truePart.getSrcVariables()) list.add(var);
for(Variable var: falsePart.getSrcVariables()) list.add(var);
return list.toArray(new Variable[]{});
}
@Override
public Variable[] getDestVariables() {
return new Variable[]{};
}
@Override
public boolean hasMethodInvocation() {
return cond.hasMethodInvocation() | truePart.hasMethodInvocation() | falsePart.hasMethodInvocation();
}
}