package synthesijer.ast.expr;
import synthesijer.ast.Expr;
import synthesijer.ast.Op;
import synthesijer.ast.Scope;
import synthesijer.ast.Type;
import synthesijer.ast.Variable;
public class UnaryExpr extends Expr{
private Op op;
private Expr arg;
private boolean postfixFlag = false;
public UnaryExpr(Scope scope){
super(scope);
}
public void setArg(Expr arg){
this.arg = arg;
}
public void setOp(Op op){
this.op = op;
}
public void setPostfix(boolean f){
postfixFlag = f;
}
public Expr getArg(){
return this.arg;
}
public Op getOp(){
return this.op;
}
public boolean isPostfix(){
return postfixFlag;
}
public void accept(SynthesijerExprVisitor v){
v.visitUnaryExpr(this);
}
@Override
public boolean isConstant() {
return arg.isConstant();
}
@Override
public boolean isVariable() {
return arg.isVariable();
}
public Type getType(){
return arg.getType();
}
public String toString(){
return String.format("UnaryExpr::(%s %s)", op, arg);
}
@Override
public Variable[] getSrcVariables(){
return arg.getSrcVariables();
}
@Override
public Variable[] getDestVariables(){
if(op == Op.INC || op == Op.DEC){
return arg.getDestVariables();
}else{
return new Variable[]{};
}
}
@Override
public boolean hasMethodInvocation() {
return arg.hasMethodInvocation();
}
}