Bugs:
authorbdemsky <bdemsky>
Tue, 18 May 2004 04:31:35 +0000 (04:31 +0000)
committerbdemsky <bdemsky>
Tue, 18 May 2004 04:31:35 +0000 (04:31 +0000)
1) Sources file assumed filesystem example
2) Bug where we were generating bad code for computing cheapest repair
3) Bug where we were generating if condition for typechecks when we shouldn't be.

Repair/RepairCompiler/MCC/IR/DotExpr.java
Repair/RepairCompiler/MCC/IR/RepairGenerator.java
Repair/RepairCompiler/MCC/IR/Sources.java

index 505459f..62fbe05 100755 (executable)
@@ -250,12 +250,16 @@ public class DotExpr extends Expr {
                } else if (DOTYPECHECKS) {
                    writer.outputline("bool "+typevar.getSafeSymbol()+"=assertvalidtype(" + dest.getSafeSymbol() + ", " + this.td.getId() + ");");
                }
-               writer.outputline("if (!"+typevar.getSafeSymbol()+")");
-               writer.startblock();
-               writer.outputline(dest.getSafeSymbol()+"=0;");
-               if (DONULL)
-                   writer.outputline(ptr + "(" + leftd.getSafeSymbol() + " + " + offset.getSafeSymbol() + ")=0;");
-               writer.endblock();
+
+               if (DOTYPECHECKS||DOMEMCHECKS) {
+                   writer.outputline("if (!"+typevar.getSafeSymbol()+")");
+                   writer.startblock();
+                   writer.outputline(dest.getSafeSymbol()+"=0;");
+                   if (DONULL)
+                       writer.outputline(ptr + "(" + leftd.getSafeSymbol() + " + " + offset.getSafeSymbol() + ")=0;");
+                   writer.endblock();
+               }
+
                writer.endblock();
            }
            writer.endblock();
index 7921577..d8da176 100755 (executable)
@@ -767,14 +767,14 @@ public class RepairGenerator {
                            boolean negate=dpred.isNegated();
                            VarDescriptor predvalue=VarDescriptor.makeNew("Predicatevalue");
                            p.generate(cr,predvalue);
+                           if (k==0)
+                               cr.outputline("int "+costvar.getSafeSymbol()+"=0;");
+
                            if (negate)
                                cr.outputline("if (maybe||"+predvalue.getSafeSymbol()+")");
                            else
                                cr.outputline("if (maybe||!"+predvalue.getSafeSymbol()+")");
-                           if (k==0)
-                               cr.outputline("int "+costvar.getSafeSymbol()+"="+cost.getCost(dpred)+";");
-                           else
-                               cr.outputline(costvar.getSafeSymbol()+"+="+cost.getCost(dpred)+";");
+                           cr.outputline(costvar.getSafeSymbol()+"+="+cost.getCost(dpred)+";");
                        }
 
                        if(!first) {
index bde5cc9..5d11a57 100755 (executable)
@@ -13,9 +13,9 @@ public class Sources {
        SetDescriptor usedblock=(SetDescriptor)state.stSets.get("UsedBlock");
        SetDescriptor usedinode=(SetDescriptor)state.stSets.get("UsedInode");
 
-       if (usedblock.isSubset(sd))
+       if (usedblock!=null&&usedblock.isSubset(sd))
            return true;
-       if (usedinode.isSubset(sd))
+       if (usedinode!=null&&usedinode.isSubset(sd))
            return true;
 
        return false;
@@ -27,9 +27,9 @@ public class Sources {
        SetDescriptor usedblock=(SetDescriptor)state.stSets.get("UsedBlock");
        SetDescriptor usedinode=(SetDescriptor)state.stSets.get("UsedInode");
 
-       if (usedblock.isSubset(sd))
+       if (usedblock!=null&&usedblock.isSubset(sd))
            return (SetDescriptor)state.stSets.get("FreeBlock");
-       if (usedinode.isSubset(sd))
+       if (usedinode!=null&&usedinode.isSubset(sd))
            return (SetDescriptor)state.stSets.get("FreeInode");
 
        return null;