Update:
[repair.git] / Repair / RepairCompiler / MCC / IR / Updates.java
index 5e3652b044c7b45ced723b3541aa856349f46b57..684dfc8d630c11d9dc0e08f3c1b945015f359b1b 100755 (executable)
@@ -23,23 +23,13 @@ class Updates {
     }
 
     public Updates(Expr lexpr, Expr rexpr, Opcode op, boolean negate) {
+       if (!lexpr.isValue())
+           System.out.println("Building invalid update");
        leftexpr=lexpr;
        type=Updates.EXPR;
-       if (negate) {
-       /* remove negation through opcode translation */
-           if (op==Opcode.GT)
-               op=Opcode.LE;
-           else if (op==Opcode.GE)
-               op=Opcode.LT;
-           else if (op==Opcode.EQ)
-               op=Opcode.NE;
-           else if (op==Opcode.NE)
-               op=Opcode.EQ;
-           else if (op==Opcode.LT)
-               op=Opcode.GE;
-           else if (op==Opcode.LE)
-               op=Opcode.GT;
-       }
+
+       op=Opcode.translateOpcode(negate,op);
+
        opcode=op;
        rightexpr=rexpr;
     }
@@ -55,7 +45,14 @@ class Updates {
            return ((VarExpr)leftexpr).getVar();
        } else if (isField()) {
            Expr e=leftexpr;
-           for(;e instanceof DotExpr;e=((DotExpr)e).getExpr()) ;
+           do {
+               for(;e instanceof DotExpr;e=((DotExpr)e).getExpr()) ;
+               if (e instanceof VarExpr)
+                   break;
+               if (e instanceof CastExpr)
+                   e=((CastExpr)e).getExpr();
+               else throw new Error("Unrecognized Expr:"+e.name());
+           } while(true);
            return ((VarExpr)e).getVar();
        } else {
            System.out.println(toString());
@@ -92,6 +89,8 @@ class Updates {
     }
 
     public Updates(Expr lexpr, Expr rexpr) {
+       if (!lexpr.isValue())
+           System.out.println("Building invalid update");
        leftexpr=lexpr;
        rightexpr=rexpr;
        type=Updates.EXPR;
@@ -99,6 +98,8 @@ class Updates {
     }
 
     public Updates(Expr lexpr, int rpos) {
+       if (!lexpr.isValue())
+           System.out.println("Building invalid update");
        leftexpr=lexpr;
        rightposition=rpos;
        type=Updates.POSITION;