package synthesijer.ast.statement; import java.util.ArrayList; import java.util.LinkedHashMap; import synthesijer.ast.Method; import synthesijer.ast.Module; import synthesijer.ast.Scope; import synthesijer.ast.Statement; import synthesijer.ast.SynthesijerAstVisitor; import synthesijer.ast.Variable; public class BlockStatement extends Statement implements Scope{ private final Scope parent; private ArrayList<Statement> statements = new ArrayList<>(); private ArrayList<VariableDecl> variableDecls = new ArrayList<>(); private LinkedHashMap<String, Variable> varTable = new LinkedHashMap<>(); public BlockStatement(Scope scope){ super(scope); this.parent = scope; parent.addScope(this); } public void addScope(Scope s){ parent.addScope(s); } public Scope getParentScope(){ return parent; } public Module getModule(){ return parent.getModule(); } public Method getMethod(){ return parent.getMethod(); } public void addStatement(Statement stmt){ if(stmt != null){ statements.add(stmt); } } public void replaceStatements(ArrayList<Statement> newList){ statements = newList; //System.out.println(" replace -> #" + statements.size()); } public ArrayList<Statement> getStatements(){ return statements; } public void addVariableDecl(VariableDecl v){ variableDecls.add(v); varTable.put(v.getVariable().getName(), v.getVariable()); } public VariableDecl[] getVariableDecls(){ return variableDecls.toArray(new VariableDecl[]{}); } public Variable search(String s){ Variable v = varTable.get(s); if(v != null) return v; return parent.search(s); } public void accept(SynthesijerAstVisitor v){ v.visitBlockStatement(this); } }