5 public class ForQuantifier extends Quantifier {
7 VarDescriptor var = null;
11 public ForQuantifier() {}
13 public void setVar(VarDescriptor vd) {
17 public VarDescriptor getVar() {
21 public void setBounds(Expr lower, Expr upper) {
26 public Set getRequiredDescriptors() {
27 HashSet set=new HashSet();
28 set.addAll(lower.getRequiredDescriptors());
29 set.addAll(upper.getRequiredDescriptors());
33 public String toString() {
34 return "for quantifier " + var.getSymbol() + " = " + lower.name() + " to " + upper.name();
37 public void generate_open(CodeWriter writer) {
38 VarDescriptor ld = VarDescriptor.makeNew();
39 VarDescriptor ud = VarDescriptor.makeNew();
40 lower.generate(writer, ld);
41 upper.generate(writer, ud);
42 writer.addDeclaration("int",var.getSafeSymbol());
43 writer.outputline("for (" + var.getSafeSymbol() + " = " + ld.getSafeSymbol() + "; " + var.getSafeSymbol() + " <= " + ud.getSafeSymbol() + "; " + var.getSafeSymbol() + "++)");
47 public void generate_open(CodeWriter writer, String type,int number, String
49 generate_open(writer);
52 public int generate_worklistload(CodeWriter writer, int offset) {
53 String varname = var.getSafeSymbol();
54 writer.addDeclaration("int",varname);
55 writer.outputline(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'");