package zinara.ast.instructions;
import zinara.ast.expression.Expression;
import zinara.ast.instructions.IfCase;
import zinara.code_generator.Genx86;
import zinara.exceptions.InvalidCodeException;
import zinara.exceptions.TypeClashException;
import java.util.ArrayList;
import java.io.IOException;
public class If extends Instruction{
private ArrayList cases; // Arraylist of IfCase's
public If(ArrayList cs){
this.cases = cs;
}
public ArrayList getCases(){
return this.cases;
}
public String toString() {
String ret = "<";
for (int i = 0; i < cases.size(); i++)
ret += (Instruction)cases.get(i);
return (ret + ">");
}
public void checkNoReturns(){
IfCase ifc;
for(int i = 0; i<cases.size(); i++){
ifc=((IfCase)cases.get(i));
ifc.checkNoReturns();
}
}
public void tox86(Genx86 generator)
throws IOException,InvalidCodeException{
IfCase ic;
for (int i = 0; i < cases.size(); i++) {
ic = (IfCase)cases.get(i);
ic.break_label = break_label;
ic.continue_label = continue_label;
ic.register = register;
ic.nextInst = ((i != cases.size() - 1) ? generator.newLabel() : nextInst);
ic.completeIfNextInst = nextInst;
ic.tox86(generator);
if (i != cases.size() - 1) generator.writeLabel(ic.nextInst);
}
}
}