X-Git-Url: http://plrg.eecs.uci.edu/git/?p=repair.git;a=blobdiff_plain;f=Repair%2FRepairCompiler%2FMCC%2FIR%2FUpdateNode.java;h=5bb92367fb1f67dcd78a77e2e774ee2bf3327ae2;hp=31e954c03c053ca3764d979346fb627fb3075326;hb=6e6caa157ea20e565ea92786ef266c952e6f39b3;hpb=30816378d0198b3cdeac43ad5bf80df3b7646406;ds=inline diff --git a/Repair/RepairCompiler/MCC/IR/UpdateNode.java b/Repair/RepairCompiler/MCC/IR/UpdateNode.java index 31e954c..5bb9236 100755 --- a/Repair/RepairCompiler/MCC/IR/UpdateNode.java +++ b/Repair/RepairCompiler/MCC/IR/UpdateNode.java @@ -5,19 +5,172 @@ class UpdateNode { Vector updates; Vector bindings; Hashtable binding; + Rule rule; + - public UpdateNode() { + public UpdateNode(Rule r) { updates=new Vector(); bindings=new Vector(); binding=new Hashtable(); + rule=r; + } + + public Rule getRule() { + return rule; + } + + public String toString() { + String st=""; + for(int i=0;ij) + toremove.add(u1); + else + toremove.add(u2); + continue; + } + + /* Handle = or != NULL */ + if ((((u1.getOpcode()==Opcode.EQ)&&(u2.getOpcode()==Opcode.NE))|| + ((u1.getOpcode()==Opcode.NE)&&(u2.getOpcode()==Opcode.EQ)))&& + (((u1.isExpr()&&u1.getRightExpr().isNull())&&(!u2.isExpr()||u2.getRightExpr().isNonNull())) + ||((!u1.isExpr()||u1.getRightExpr().isNonNull())&&(u2.isExpr()&&u2.getRightExpr().isNull())))) { + if (u1.getOpcode()==Opcode.NE) + toremove.add(u1); + else + toremove.add(u2); + continue; + } + + /* Handle = and != to different constants */ + if ((((u1.getOpcode()==Opcode.EQ)&&(u2.getOpcode()==Opcode.NE))|| + ((u1.getOpcode()==Opcode.NE)&&(u2.getOpcode()==Opcode.EQ)))&& + (u1.isExpr()&&u1.getRightExpr() instanceof LiteralExpr)&& + (u2.isExpr()&&u2.getRightExpr() instanceof LiteralExpr)&& + !u1.getRightExpr().equals(u2.getRightExpr())) { + if (u1.getOpcode()==Opcode.NE) + toremove.add(u1); + else + toremove.add(u2); + continue; + } + + /* Compatible operations < & <= */ + if (((u1.getOpcode()==Opcode.LT)||(u1.getOpcode()==Opcode.LE))&& + ((u2.getOpcode()==Opcode.LT)||(u2.getOpcode()==Opcode.LE))) + continue; + + /* Compatible operations > & >= */ + if (((u1.getOpcode()==Opcode.GT)||(u1.getOpcode()==Opcode.GE))&& + ((u2.getOpcode()==Opcode.GT)||(u2.getOpcode()==Opcode.GE))) + continue; + /* Ranges */ + + //XXXXXX: TODO + /* Equality & Comparisons */ + //XXXXXX: TODO + + return false; /* They interfere */ + } + } + updates.removeAll(toremove); + return true; + } + public void addBinding(Binding b) { bindings.add(b); binding.put(b.getVar(),b); @@ -30,7 +183,6 @@ class UpdateNode { return null; } - public void addUpdate(Updates u) { updates.add(u); }