5 public class ForQuantifier extends Quantifier {
7 VarDescriptor var = null;
11 public ForQuantifier() {}
13 public void setVar(VarDescriptor vd) {
17 public void setBounds(Expr lower, Expr upper) {
22 public Set getRequiredDescriptors() {
26 public String toString() {
27 return "for quantifier " + var.getSymbol() + " = " + lower + " to " + upper;
30 public void generate_open(CodeWriter writer) {
31 VarDescriptor ld = VarDescriptor.makeNew();
32 VarDescriptor ud = VarDescriptor.makeNew();
33 lower.generate(writer, ld);
34 upper.generate(writer, ud);
36 writer.outputline("for (int " + var.getSafeSymbol() + " = " + ld.getSafeSymbol() + "; " + var.getSafeSymbol() + " <= " + ud.getSafeSymbol() + "; " + var.getSafeSymbol() + "++)");
40 public int generate_worklistload(CodeWriter writer, int offset) {
41 String varname = var.getSafeSymbol();
42 writer.outputline("int " + varname + " = wi->word" + offset + ";");
46 public int generate_workliststore(CodeWriter writer, int offset) {
47 String varname = var.getSafeSymbol();
48 writer.outputline("wi->word" + offset + " = " + varname + ";");
53 public boolean typecheck(SemanticAnalyzer sa) {
54 TypeDescriptor lt = lower.typecheck(sa);
55 TypeDescriptor ut = upper.typecheck(sa);
57 if (lt == null || ut == null) {
63 if (lt != ReservedTypeDescriptor.INT) {
64 sa.getErrorReporter().report(null, "Lower bound of for quantifier must be of type 'int'");
68 if (ut != ReservedTypeDescriptor.INT) {
69 sa.getErrorReporter().report(null, "Upper bound of for quantifier must be of type 'int'");