X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Repair%2FRepairCompiler%2FMCC%2FIR%2FTermination.java;h=689a5d2382169d166d58fc60a370cb68c663e303;hb=445c4854d296285d0ed336f8cb9002ab2e3e75bc;hp=0b01ab9a6db5071153e26041c366fa6c4242cd41;hpb=30816378d0198b3cdeac43ad5bf80df3b7646406;p=repair.git diff --git a/Repair/RepairCompiler/MCC/IR/Termination.java b/Repair/RepairCompiler/MCC/IR/Termination.java index 0b01ab9..689a5d2 100755 --- a/Repair/RepairCompiler/MCC/IR/Termination.java +++ b/Repair/RepairCompiler/MCC/IR/Termination.java @@ -15,6 +15,10 @@ public class Termination { Hashtable scopesatisfy; Hashtable scopefalsify; Hashtable consequence; + Hashtable abstractadd; + Hashtable abstractremove; + Hashtable conjtonodemap; + Set removedset; State state; @@ -29,11 +33,15 @@ public class Termination { consequence=new Hashtable(); updatenodes=new HashSet(); consequencenodes=new HashSet(); + abstractadd=new Hashtable(); + abstractremove=new Hashtable(); + conjtonodemap=new Hashtable(); generateconjunctionnodes(); generatescopenodes(); generaterepairnodes(); generatedatastructureupdatenodes(); + generatecompensationnodes(); generateabstractedges(); generatescopeedges(); @@ -41,16 +49,31 @@ public class Termination { HashSet superset=new HashSet(); superset.addAll(conjunctions); - superset.addAll(abstractrepair); - superset.addAll(updatenodes); - superset.addAll(scopenodes); - superset.addAll(consequencenodes); + //superset.addAll(abstractrepair); + //superset.addAll(updatenodes); + //superset.addAll(scopenodes); + //superset.addAll(consequencenodes); + GraphNode.computeclosure(superset,null); try { GraphNode.DOTVisitor.visit(new FileOutputStream("graph.dot"),superset); } catch (Exception e) { e.printStackTrace(); System.exit(-1); } + for(Iterator it=updatenodes.iterator();it.hasNext();) { + GraphNode gn=(GraphNode)it.next(); + TermNode tn=(TermNode)gn.getOwner(); + MultUpdateNode mun=tn.getUpdate(); + System.out.println(gn.getTextLabel()); + System.out.println(mun.toString()); + } + GraphAnalysis ga=new GraphAnalysis(this); + removedset=ga.doAnalysis(); + System.out.println("Removing:"); + for(Iterator it=removedset.iterator();it.hasNext();) { + GraphNode gn=(GraphNode)it.next(); + System.out.println(gn.getTextLabel()); + } } void generateconjunctionnodes() { @@ -64,7 +87,10 @@ public class Termination { "Conj ("+i+","+j+") "+dnf.get(j).name() ,tn); conjunctions.add(gn); - conjunctionmap.put(c,gn); + if (!conjunctionmap.containsKey(c)) + conjunctionmap.put(c,new HashSet()); + ((Set)conjunctionmap.get(c)).add(gn); + conjtonodemap.put(dnf.get(j),gn); } } } @@ -101,15 +127,28 @@ public class Termination { GraphNode gn2=(GraphNode)conjiterator.next(); TermNode tn2=(TermNode)gn2.getOwner(); Conjunction conj=tn2.getConjunction(); + Constraint cons=tn2.getConstraint(); + for(int i=0;i