generate_call();
generate_start();
generate_rules();
+ generate_print();
generate_checks();
generate_teardown();
CodeWriter crhead = new StandardCodeWriter(this.outputhead);
cr.endblock();
}
+ private void generate_print() {
+
+ final SymbolTable st = new SymbolTable();
+
+ CodeWriter cr = new StandardCodeWriter(outputaux) {
+ public SymbolTable getSymbolTable() { return st; }
+ };
+
+ cr.outputline("// printing sets!");
+ cr.outputline("printf(\"\\n\\nPRINTING SETS AND RELATIONS\\n\");");
+
+ Iterator setiterator = state.stSets.descriptors();
+ while (setiterator.hasNext()) {
+ SetDescriptor sd = (SetDescriptor) setiterator.next();
+ if (sd.getSymbol().equals("int") || sd.getSymbol().equals("token")) {
+ continue;
+ }
+
+ String setname = sd.getSafeSymbol();
+
+ cr.startblock();
+ cr.outputline("// printing set " + setname);
+ cr.outputline("printf(\"\\nPrinting set " + sd.getSymbol() + " - %d elements \\n\", " + setname + "_hash->count());");
+ cr.outputline("SimpleIterator __setiterator;");
+ cr.outputline("" + setname + "_hash->iterator(__setiterator);");
+ cr.outputline("while (__setiterator.hasNext())");
+ cr.startblock();
+ cr.outputline("int __setval = (int) __setiterator.next();");
+
+ TypeDescriptor td = sd.getType();
+ if (td instanceof StructureTypeDescriptor) {
+ StructureTypeDescriptor std = (StructureTypeDescriptor) td;
+ VarDescriptor vd = new VarDescriptor ("__setval", "__setval", td, false);
+ std.generate_printout(cr, vd);
+ } else { // Missing type descriptor or reserved type, just print int
+ cr.outputline("printf(\"<%d> \", __setval);");
+ }
+
+
+ cr.endblock();
+ cr.endblock();
+ }
+
+ cr.outputline("printf(\"\\n\\n------------------- END PRINTING\\n\");");
+ }
+
Set ruleset=null;
private void generate_rules() {
/* first we must sort the rules */
private void generate_checks() {
/* do constraint checks */
- Vector constraints = state.vConstraints;
+ // Vector constraints = state.vConstraints;
- for (int i = 0; i < constraints.size(); i++) {
- Constraint constraint = (Constraint) constraints.elementAt(i);
+
+ // for (int i = 0; i < constraints.size(); i++) {
+ // Constraint constraint = (Constraint) constraints.elementAt(i);
+ for (Iterator i = termination.constraintdependence.computeOrdering().iterator(); i.hasNext();) {
+ Constraint constraint = (Constraint) ((GraphNode)i.next()).getOwner();
{
final SymbolTable st = constraint.getSymbolTable();
- CodeWriter cr = new StandardCodeWriter(outputaux) {
- public SymbolTable getSymbolTable() { return st; }
- };
+ CodeWriter cr = new StandardCodeWriter(outputaux);
+ cr.pushSymbolTable(constraint.getSymbolTable());
+
cr.outputline("// checking " + escape(constraint.toString()));
cr.startblock();
ExprPredicate ep=(ExprPredicate)dpred.getPredicate();
OpExpr expr=(OpExpr)ep.expr;
Opcode opcode=expr.getOpcode();
- {
- boolean negated=dpred.isNegated();
- if (negated)
- if (opcode==Opcode.GT) {
- opcode=Opcode.LE;
- } else if (opcode==Opcode.GE) {
- opcode=Opcode.LT;
- } else if (opcode==Opcode.LT) {
- opcode=Opcode.GE;
- } else if (opcode==Opcode.LE) {
- opcode=Opcode.GT;
- } else if (opcode==Opcode.EQ) {
- opcode=Opcode.NE;
- } else if (opcode==Opcode.NE) {
- opcode=Opcode.EQ;
- } else {
- throw new Error("Unrecognized Opcode");
- }
- }
+ opcode=Opcode.translateOpcode(dpred.isNegated(),opcode);
+
MultUpdateNode munremove;
MultUpdateNode munadd;
} else {
throw new Error("Unrecognized Opcode");
}
+
+// In some cases the analysis has determined that generating removes
+// is unnecessary
+ if (generateremove&&munremove==null)
+ generateremove=false;
+
Descriptor d=ep.getDescriptor();
if (generateremove) {
cr.outputline("for(;"+change.getSafeSymbol()+"<0;"+change.getSafeSymbol()+"++)");