package synthesijer.ast.statement; import synthesijer.ast.Expr; import synthesijer.ast.Scope; import synthesijer.ast.SynthesijerAstVisitor; import synthesijer.ast.Type; import synthesijer.ast.Variable; public class VariableDecl extends ExprContainStatement{ private Variable var; private Expr init; private boolean flagGlobalConstant = false; private boolean flagPublic = false; private boolean flagVolatile = false; private boolean flagMethodParam = false; public VariableDecl(Scope scope, String name, Type type, Expr init){ super(scope); this.init = init; var = new Variable(name, type, scope.getMethod(), init); } public String getName(){ return var.getName(); } public Expr getExpr(){ return init; } public void setGlobalConstant(boolean f){ flagGlobalConstant = f; var.setGlobalConstant(f); } public boolean isGlobalConstant(){ return flagGlobalConstant; } public void setPublic(boolean f){ flagPublic = f; var.setPublic(f); } public boolean isPublic(){ return flagPublic; } public void setVolatile(boolean f){ flagVolatile = f; var.setVolatile(f); } public boolean isVolatile(){ return flagVolatile; } public void setDebug(boolean f){ var.setDebug(f); } public boolean isDebug(){ return var.isDebug(); } public void setMethodParam(boolean f){ flagMethodParam = f; var.setMethodParam(f); } public boolean isMethodParam(){ return flagMethodParam; } public Variable getVariable(){ return var; } public Type getType(){ return var.getType(); } public boolean hasInitExpr(){ return init != null; } public Expr getInitExpr(){ return init; } public void setInitExpr(Expr e) { init = e; var.setInitExpr(e); } public void accept(SynthesijerAstVisitor v){ v.visitVariableDecl(this); } public String toString(){ return "VariableDecl: " + var; } @Override public Variable[] getSrcVariables(){ if(getExpr() != null){ return getExpr().getSrcVariables(); }else{ return new Variable[]{}; } } @Override public Variable[] getDestVariables(){ return new Variable[]{var}; } }