found a bug, results still empty
authorjjenista <jjenista>
Mon, 7 Nov 2011 22:27:46 +0000 (22:27 +0000)
committerjjenista <jjenista>
Mon, 7 Nov 2011 22:27:46 +0000 (22:27 +0000)
Robust/src/Analysis/Disjoint/DefiniteReachAnalysis.java
Robust/src/Analysis/Disjoint/DefiniteReachState.java
Robust/src/Analysis/Disjoint/EdgeKey.java
Robust/src/Tests/disjoint/definite/test.java
Robust/src/Util/MultiViewMap.java

index 97f2a4164f2c4ed5b84dd60c5d964b7fb1ba8fef..2c57170ebcff782196ac5745ccf761a5db5c3f8a 100644 (file)
@@ -1,6 +1,5 @@
 package Analysis.Disjoint;
 
-import java.io.*;
 import java.util.*;
 
 import IR.*;
@@ -44,6 +43,7 @@ public class DefiniteReachAnalysis {
                     Set<EdgeKey> edgeKeysForLoad ) {
     DefiniteReachState state = makeIn( fn );
     state.load( x, y, f, edgeKeysForLoad );
+    state.writeState( "YO" );
     fn2state.put( fn, state ); 
   }
 
@@ -80,14 +80,7 @@ public class DefiniteReachAnalysis {
 
 
   public void writeState( FlatNode fn, String outputName ) {
-    DefiniteReachState state = makeIn( fn );
-    try {
-      BufferedWriter bw = new BufferedWriter( new FileWriter( outputName+".txt" ) );
-      bw.write( state.toString() );
-      bw.close();
-    } catch( IOException e ) {
-      System.out.println( "ERROR writing definite reachability state:\n  "+e );
-    }
+    makeIn( fn ).writeState( outputName );
   }
 
 
@@ -106,8 +99,14 @@ public class DefiniteReachAnalysis {
   // before the given program point by merging the out
   // states of the predecessor statements
   private DefiniteReachState makeIn( FlatNode fn ) {
-    DefiniteReachState stateIn = new DefiniteReachState();
-    for( int i = 0; i < fn.numPrev(); ++i ) {
+    if( fn.numPrev() <= 1 ) {
+      return new DefiniteReachState();
+    }
+
+    DefiniteReachState stateIn = 
+      new DefiniteReachState( get( fn.getPrev( 0 ) ) );
+
+    for( int i = 1; i < fn.numPrev(); ++i ) {
       stateIn.merge( get( fn.getPrev( i ) ) );
     }
     return stateIn;
index 7ab37d9786c6a590e8a7e80881a1bb911aa19867..67f545ce9973fd4cdb3acf7aefaa48559de5aafe 100644 (file)
@@ -1,5 +1,6 @@
 package Analysis.Disjoint;
 
+import java.io.*;
 import java.util.*;
 
 import IR.*;
@@ -82,11 +83,15 @@ public class DefiniteReachState {
 
 
 
+  public DefiniteReachState( DefiniteReachState toCopy ) {
+    this.R = toCopy.R.clone( RBuilder );
+  }
 
 
   public DefiniteReachState() {
     R = RBuilder.build();
     //Rs = new HashMap<TempDescriptor, DefReachKnown>();
+
     //Fu = FuBuilder.build();
   }
 
@@ -340,6 +345,17 @@ public class DefiniteReachState {
   }
 
 
+  public void writeState( String outputName ) {
+    try {
+      BufferedWriter bw = new BufferedWriter( new FileWriter( "defReach-"+outputName+".txt" ) );
+      bw.write( this.toString() );
+      bw.close();
+    } catch( IOException e ) {
+      System.out.println( "ERROR writing definite reachability state:\n  "+e );
+    }
+  }
+
+
 
   public String toString() {
     StringBuilder s = new StringBuilder();
index f4282bcc5436df6808dac4e3a4cc49d00893ee11..b867d3ba975ff14821df6b57ead280c3d70517ed 100644 (file)
@@ -14,6 +14,10 @@ public class EdgeKey {
     this.f     = f;
   }
 
+  public String toString() {
+    return "<"+srcId+", "+f+", "+dstId+">";
+  }
+
   public Integer getSrcId() {
     return srcId;
   }
index e2f10cc0d1a93a36b2c01b263282d6151d99f2e4..cb4238bd7237a3da57d05851ddcabff9398672e8 100644 (file)
@@ -8,13 +8,15 @@ public class Test {
   
 
   static public void main( String args[] ) {
-    
+    gendefreach yn1;    
+
     Foo x = getFlagged();
     Foo y = getUnflagged();
     x.f = y;
 
     // x is flagged and y is reachable from
     // at most one object from that site
+    gendefreach y0;
     genreach y0;
 
     Foo t = getFlagged();
@@ -23,6 +25,7 @@ public class Test {
     // x is flagged and y is reachable from
     // at most one object from that site, even
     // though x is summarized now
+    gendefreach y1;
     genreach y1;
 
     x.g = y;
@@ -32,8 +35,9 @@ public class Test {
     // from x, but we don't and x is summarized
     // so we conservatively increase the arity
     // of objects y is reachable from.
-    genreach y2;
     gendefreach y2;
+    genreach y2;
+
 
     System.out.println( x+","+y );
   }
index 0a0b8878c93f5fab4fc74887f2fd3b3f874238ba..c8482c9196c38f0e15172cb71eb507e1501f3a8d 100644 (file)
@@ -79,6 +79,15 @@ public class MultiViewMap<T> {
   }\r
 \r
 \r
+  public MultiViewMap<T> clone( MultiViewMapBuilder<T> builder ) {\r
+    MultiViewMap<T> out = builder.build();\r
+    for( Map.Entry<MultiKey, T> entry : this.get().entrySet() ) {\r
+      out.put( entry.getKey(), entry.getValue() );\r
+    }\r
+    return out;\r
+  }\r
+\r
+\r
   public boolean equals( Object o ) {\r
     if( this == o ) {\r
       return true;\r