package zinara.ast;
import zinara.ast.type.RoutineType;
import zinara.code_generator.Genx86;
import zinara.exceptions.InvalidCodeException;
import zinara.exceptions.TypeClashException;
import zinara.symtable.SymTable;
import zinara.symtable.SymValue;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
public class Program extends ASTNode {
private SymTable symtable;
private Main main;
private ArrayList declarations;
public Program(SymTable st, Main m, ArrayList ds) {
symtable = st;
main = m;
declarations = ds;
}
public Program(SymTable st, Main m) {
symtable = st;
main = m;
declarations = null;
}
public Main getMain() { return this.main; }
public SymTable getSymTable() { return symtable; }
public String toString() { return "(Program: " + main + ")"; }
public ArrayList declarations(){
return this.declarations;
}
public void tox86(Genx86 generator)
throws IOException, InvalidCodeException{
// Generacion de subrutinas
if (declarations != null)
for (int i = 0; i < declarations.size(); i++){
Declaration d = (Declaration)(declarations.get(i));
if (d.getType() instanceof RoutineType)
d.tox86(generator);
}
// Reserva de espacio y etiqueta del main
generator.generateHeader(symtable);
// Asignacion de declaraciones
if (declarations != null)
for (int i = 0; i < declarations.size(); i++){
Declaration d = (Declaration)(declarations.get(i));
if (! (d.getType() instanceof RoutineType))
d.tox86(generator);
}
main.tox86(generator);
}
}