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 AssignExpr extends Expr{
private Expr lhs, rhs;
public AssignExpr(Scope scope){
super(scope);
}
public void setLhs(Expr expr){
lhs = expr;
}
public void setRhs(Expr expr){
rhs = expr;
}
public Expr getLhs(){
return lhs;
}
public Expr getRhs(){
return rhs;
}
public void accept(SynthesijerExprVisitor v){
v.visitAssignExpr(this);
}
@Override
public boolean isConstant() {
return false;
}
@Override
public boolean isVariable() {
return false;
}
@Override
public Type getType(){
return lhs.getType();
}
public String toString(){
return String.format("Assign::(assign %s %s)", lhs, rhs);
}
@Override
public Variable[] getSrcVariables(){
ArrayList<Variable> list = new ArrayList<>();
for(Variable var: rhs.getSrcVariables()) list.add(var);
return list.toArray(new Variable[]{});
}
@Override
public Variable[] getDestVariables(){
ArrayList<Variable> list = new ArrayList<>();
for(Variable var: lhs.getSrcVariables()) list.add(var);
return list.toArray(new Variable[]{});
}
@Override
public boolean hasMethodInvocation() {
return lhs.hasMethodInvocation() || rhs.hasMethodInvocation();
}
}