X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Repair%2FRepairCompiler%2FMCC%2FIR%2FAbstractInterferes.java;h=42173617fbeaf5fd051c1fcecdd17eebd62020d8;hb=9bcbac11e044182472d004a1873e2175ef0bea49;hp=569485c7fc1cbc73b587c10b57e4cd5040109672;hpb=cd8c06f13c3d628b15f745790e3eeac2891c5736;p=repair.git diff --git a/Repair/RepairCompiler/MCC/IR/AbstractInterferes.java b/Repair/RepairCompiler/MCC/IR/AbstractInterferes.java index 569485c..4217361 100755 --- a/Repair/RepairCompiler/MCC/IR/AbstractInterferes.java +++ b/Repair/RepairCompiler/MCC/IR/AbstractInterferes.java @@ -50,7 +50,24 @@ class AbstractInterferes { return false; } } - /* This if handles all the c comparisons in the paper */ + + if (ar.getDescriptor()==dp.getPredicate().getDescriptor()&& + (ar.getType()==AbstractRepair.ADDTOSET||ar.getType()==AbstractRepair.ADDTORELATION)&& + (dp.getPredicate() instanceof ExprPredicate)&& + (((ExprPredicate)dp.getPredicate()).getType()==ExprPredicate.SIZE)) { + boolean neg2=dp.isNegated(); + Opcode op2=((ExprPredicate)dp.getPredicate()).getOp(); + int size2=((ExprPredicate)dp.getPredicate()).leftsize(); + if ((!neg2&&(op2==Opcode.EQ)&&(size2==0))|| + (neg2&&(op2==Opcode.NE)&&(size2==0))|| + (!neg2&&(op2==Opcode.GE))|| + (!neg2&&(op2==Opcode.GT))|| + (neg2&&(op2==Opcode.LE))|| + (neg2&&(op2==Opcode.LT))) + return false; + } + + /* This handles all the c comparisons in the paper */ if (ar.getDescriptor()==dp.getPredicate().getDescriptor()&& (ar.getType()==AbstractRepair.REMOVEFROMSET||ar.getType()==AbstractRepair.REMOVEFROMRELATION)&& (ar.getPredicate().getPredicate() instanceof ExprPredicate)&& @@ -63,8 +80,8 @@ class AbstractInterferes { boolean neg2=dp.isNegated(); Opcode op2=((ExprPredicate)dp.getPredicate()).getOp(); int size2=((ExprPredicate)dp.getPredicate()).leftsize(); - if ((neg1&&((op1==Opcode.EQ)||(op1==Opcode.LT)||op1==Opcode.LE)||(op1==Opcode.NE))|| - (!neg1&&((op1==Opcode.EQ)||(op1==Opcode.GT)||op1==Opcode.GE)||(op1==Opcode.NE))) { + if ((!neg1&&((op1==Opcode.EQ)||(op1==Opcode.LT)||op1==Opcode.LE)||(op1==Opcode.NE))|| + (neg1&&((op1==Opcode.EQ)||(op1==Opcode.GT)||op1==Opcode.GE)||(op1==Opcode.NE))) { int size1a=0; if (neg1) { if((op1==Opcode.EQ)||(op1==Opcode.GE)) @@ -91,8 +108,37 @@ class AbstractInterferes { (neg2&&(op2==Opcode.LE)&&(size1a>size2))|| (neg2&&(op2==Opcode.LT)&&(size1a>=size2))) return false; - } + } + } + + if (ar.getDescriptor()==dp.getPredicate().getDescriptor()&& + (ar.getType()==AbstractRepair.REMOVEFROMSET||ar.getType()==AbstractRepair.REMOVEFROMRELATION)&& + (dp.getPredicate() instanceof ExprPredicate)&& + (((ExprPredicate)dp.getPredicate()).getType()==ExprPredicate.SIZE)) { + boolean neg2=dp.isNegated(); + Opcode op2=((ExprPredicate)dp.getPredicate()).getOp(); + int size2=((ExprPredicate)dp.getPredicate()).leftsize(); + if ((!neg2&&(op2==Opcode.EQ)&&(size2==0))|| + (neg2&&(op2==Opcode.NE)&&(size2==0))|| + (neg2&&(op2==Opcode.GE))|| + (neg2&&(op2==Opcode.GT))|| + (!neg2&&(op2==Opcode.LE))|| + (!neg2&&(op2==Opcode.LT))) + return false; + } + if ((ar.getDescriptor()==dp.getPredicate().getDescriptor())&& + (ar.getType()==AbstractRepair.ADDTOSET||ar.getType()==AbstractRepair.ADDTORELATION)&& + (dp.getPredicate() instanceof InclusionPredicate)&& + (dp.isNegated()==false)) + return false; /* Could only satisfy this predicate */ + + if ((ar.getDescriptor()==dp.getPredicate().getDescriptor())&& + (ar.getType()==AbstractRepair.REMOVEFROMSET||ar.getType()==AbstractRepair.REMOVEFROMRELATION)&& + (dp.getPredicate() instanceof InclusionPredicate)&& + (dp.isNegated()==true)) + return false; /* Could only satisfy this predicate */ + return true; } @@ -113,6 +159,8 @@ class AbstractInterferes { { if ((!neg2&&(op2==Opcode.GE))|| (!neg2&&(op2==Opcode.GT))|| + (neg2&&(op2==Opcode.EQ)&&(size2==0))|| + (!neg2&&(op2==Opcode.NE)&&(size2==0))|| (neg2&&(op2==Opcode.LE))|| (neg2&&(op2==Opcode.LT))) return false; @@ -129,15 +177,29 @@ class AbstractInterferes { { if ((neg2&&(op2==Opcode.GE))|| (neg2&&(op2==Opcode.GT))|| + (!neg2&&(op2==Opcode.EQ)&&(size2==0))|| + (neg2&&(op2==Opcode.NE)&&(size2==0))|| (!neg2&&(op2==Opcode.LE))|| (!neg2&&(op2==Opcode.LT))) return false; } } + if ((des==dp.getPredicate().getDescriptor())&& + satisfy&& + (dp.getPredicate() instanceof InclusionPredicate)&& + (dp.isNegated()==false)) + return false; /* Could only satisfy this predicate */ + + if ((des==dp.getPredicate().getDescriptor())&& + (!satisfy)&& + (dp.getPredicate() instanceof InclusionPredicate)&& + (dp.isNegated()==true)) + return false; /* Could only satisfy this predicate */ + return true; } - static public boolean interferes(Descriptor des, boolean satisfy, Rule r, boolean satisfyrule) { + static public boolean interferesquantifier(Descriptor des, boolean satisfy, Quantifiers r, boolean satisfyrule) { for(int i=0;i