import java.util.*;
public class SetInclusion extends Inclusion {
-
+
Expr elementexpr;
SetDescriptor set;
public String generatedresult = null;
public String generatedaddeditem = null;
- static boolean worklist = false;
+ public static boolean worklist = false;
public boolean dostore = true;
public String toString() {
String addeditem = (VarDescriptor.makeNew("addeditem")).getSafeSymbol();
generatedaddeditem = addeditem; // allows access to the result of the set addition later.
- // we set equal to one so that if dostore == false the guard in teh
- // metainclusion generation for the subrules and sub quantifiers will go on
- writer.outputline("int " + addeditem + " = 1;");
+ // we set equal to one so that if dostore == false the guard in teh
+ // metainclusion generation for the subrules and sub quantifiers will go on
+
if (dostore) {
- writer.outputline(addeditem + " = " + set.getSafeSymbol() + "_hash->add((int)" + vd.getSafeSymbol()
- + ", (int)" + vd.getSafeSymbol() + ");");
-
+ /* if (!Compiler.REPAIR) {
+ writer.outputline("int " + addeditem + " = 1;");
+ writer.outputline(addeditem + " = " + set.getSafeSymbol() + "_hash->add((int)" + vd.getSafeSymbol()
+ + ", (int)" + vd.getSafeSymbol() + ");");
+ } else {*/
+ Repair.generate_dispatch(writer, set, vd.getSafeSymbol());
+ // }
+
if (SetInclusion.worklist) {
writer.outputline("if (" + addeditem + ")");
- writer.startblock(); {
+ writer.startblock(); {
WorkList.generate_dispatch(writer, set, vd.getSafeSymbol());
}
writer.endblock();
}
- if (Compiler.REPAIR) {
- writer.outputline("if (" + addeditem + ")");
- writer.startblock(); {
- Repair.generate_dispatch(writer, set, vd.getSafeSymbol());
- }
- writer.endblock();
- }
-
- }
-
+ }
}
public boolean typecheck(SemanticAnalyzer sa) {
TypeDescriptor td = elementexpr.typecheck(sa);
-
+
if (td == null) {
+ sa.getErrorReporter().report(null, "No type found for:"+elementexpr);
return false;
}
sa.getErrorReporter().report(null, "Type mismatch: attempting to test for types '" + td.getSymbol() + "' in set of type '" + settype.getSymbol() + "'");
return false;
}
-
+
return true;
}