5 public class ForQuantifier extends Quantifier {
7 VarDescriptor var = null;
11 public ForQuantifier() {}
13 public void setVar(VarDescriptor vd) {
17 public VarDescriptor getVar() {
22 public void setBounds(Expr lower, Expr upper) {
27 public Set getRequiredDescriptors() {
28 HashSet set=new HashSet();
29 set.addAll(lower.getRequiredDescriptors());
30 set.addAll(upper.getRequiredDescriptors());
34 public String toString() {
35 return "for quantifier " + var.getSymbol() + " = " + lower.name() + " to " + upper.name();
38 public void generate_open(CodeWriter writer) {
39 VarDescriptor ld = VarDescriptor.makeNew();
40 VarDescriptor ud = VarDescriptor.makeNew();
41 lower.generate(writer, ld);
42 upper.generate(writer, ud);
44 writer.outputline("for (int " + var.getSafeSymbol() + " = " + ld.getSafeSymbol() + "; " + var.getSafeSymbol() + " <= " + ud.getSafeSymbol() + "; " + var.getSafeSymbol() + "++)");
48 public void generate_open(CodeWriter writer, String type,int number, String
50 generate_open(writer);
53 public int generate_worklistload(CodeWriter writer, int offset) {
54 String varname = var.getSafeSymbol();
55 writer.outputline("int " + varname + " = wi->word" + offset + ";");
59 public int generate_workliststore(CodeWriter writer, int offset) {
60 String varname = var.getSafeSymbol();
61 writer.outputline("wi->word" + offset + " = " + varname + ";");
66 public boolean typecheck(SemanticAnalyzer sa) {
67 TypeDescriptor lt = lower.typecheck(sa);
68 TypeDescriptor ut = upper.typecheck(sa);
70 if (lt == null || ut == null) {
76 if (lt != ReservedTypeDescriptor.INT) {
77 sa.getErrorReporter().report(null, "Lower bound of for quantifier must be of type 'int'");
81 if (ut != ReservedTypeDescriptor.INT) {
82 sa.getErrorReporter().report(null, "Upper bound of for quantifier must be of type 'int'");