}
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;
}
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());
}
public Updates(Expr lexpr, Expr rexpr) {
+ if (!lexpr.isValue())
+ System.out.println("Building invalid update");
leftexpr=lexpr;
rightexpr=rexpr;
type=Updates.EXPR;
}
public Updates(Expr lexpr, int rpos) {
+ if (!lexpr.isValue())
+ System.out.println("Building invalid update");
leftexpr=lexpr;
rightposition=rpos;
type=Updates.POSITION;