package zinara.ast; import java.io.IOException; import java.util.ArrayList; import zinara.ast.ASTNode; import zinara.ast.expression.Identifier; import zinara.ast.instructions.MultipleAssignation; import zinara.ast.type.Type; import zinara.code_generator.Genx86; import zinara.exceptions.TypeClashException; import zinara.exceptions.InvalidCodeException; import zinara.symtable.SymTable; public class MultipleDeclaration extends Declaration { public ArrayList declarations; // arraylist of SingleDeclaration private Type type; public MultipleDeclaration(ArrayList ds) { this.declarations = ds; } public MultipleDeclaration(ArrayList ids, Type type, SymTable st) throws TypeClashException { ArrayList declarations = new ArrayList(); for (int i = 0; i < ids.size(); i++) declarations.add(new SingleDeclaration(type, ((String)ids.get(i)), null, true, st)); this.declarations = declarations; this.type = type; } public MultipleDeclaration(MultipleAssignation asigs, Type type, boolean var, SymTable st) throws TypeClashException { ArrayList declarations = new ArrayList(); for (int i = 0; i < asigs.assignations.size(); i++) declarations.add(new SingleDeclaration(type, (Identifier)(asigs.get(i).getLValue()), asigs.get(i).getExpression(), var, st)); this.declarations = declarations; this.type = type; } public boolean isSingle(){ return false; } public boolean add(SingleDeclaration d) { return this.declarations.add(d); } public SingleDeclaration get(int i) { return (SingleDeclaration)this.declarations.get(i); } public int size(){ return this.declarations.size(); } public Type getType(){ return this.type; } public String toString() { String ret = ""; SingleDeclaration currentDeclaration; for (int i = 0; i < declarations.size(); i++) ret += " " + declarations.get(0); return "MultipleDeclaration:" + ret; } public void tox86(Genx86 generate) throws IOException,InvalidCodeException{ for (int i = 0; i < declarations.size(); i++) ((SingleDeclaration)declarations.get(i)).tox86(generate); } }