Bug in the analysis...oops
[repair.git] / Repair / RepairCompiler / MCC / IR / ImplicitSchema.java
index 1be006833b5a50bd199929d0175afd9f8a17e376..4e34613b6feb95d3ca510c2c704ec631910ac048 100755 (executable)
@@ -1,5 +1,7 @@
 package MCC.IR;
 import MCC.State;
+import MCC.Compiler;
+
 import java.util.*;
 
 public class ImplicitSchema {
@@ -11,7 +13,9 @@ public class ImplicitSchema {
     }
 
     public void update() {
-       //      updaterules();
+       if (Compiler.REPAIR) {
+           updaterules();
+       }
        updateconstraints();
        updaterelationconstraints();
     }
@@ -23,6 +27,8 @@ public class ImplicitSchema {
     boolean needDR(RelationDescriptor rd,boolean isdomain) {
        Vector rules=state.vRules;
        SetDescriptor sd=isdomain?rd.getDomain():rd.getRange();
+       if (sd instanceof ReservedSetDescriptor)
+           return false;
        for(int i=0;i<rules.size();i++) {
            Rule r=(Rule)rules.get(i);
            if ((r.numQuantifiers()==1)&&
@@ -101,12 +107,11 @@ public class ImplicitSchema {
           1. match up quantifiers
           2. check inclusion condition
           3. see if guard expr of set rule is more general */
-
        RelationInclusion inc1=(RelationInclusion) r1.getInclusion();
        RelationDescriptor rd=inc1.getRelation();
        SetDescriptor sd=isdomain?rd.getDomain():rd.getRange();
        Expr expr=isdomain?inc1.getLeftExpr():inc1.getRightExpr();
-
+       
        Inclusion inc2=r2.getInclusion();
        if (!(inc2 instanceof SetInclusion))
            return false;
@@ -294,13 +299,15 @@ public class ImplicitSchema {
                    for(Iterator superit=supersets.iterator();superit.hasNext();) {
                        SetDescriptor sd1=(SetDescriptor)superit.next();
                        Rule nr=new Rule();
-                       nr.guard=r.guard;
+                       nr.setGuardExpr(r.getGuardExpr());
                        nr.quantifiers=r.quantifiers;
                        nr.isstatic=r.isstatic;
                        nr.isdelay=r.isdelay;
                        nr.inclusion=new SetInclusion(((SetInclusion)r.inclusion).elementexpr,sd1);
                        nr.st=r.st;
+                       nr.setnogenerate();
                        newrules.add(nr);
+                       state.implicitrule.put(nr,r);
                    }
            }
        }