bug fix, was too aggressive with equals method for canonical objects, have to do...
authorjjenista <jjenista>
Mon, 22 Feb 2010 22:21:29 +0000 (22:21 +0000)
committerjjenista <jjenista>
Mon, 22 Feb 2010 22:21:29 +0000 (22:21 +0000)
Robust/src/Analysis/Disjoint/Canonical.java
Robust/src/Analysis/Disjoint/ChangeSet.java
Robust/src/Analysis/Disjoint/ChangeTuple.java
Robust/src/Analysis/Disjoint/DisjointAnalysis.java
Robust/src/Analysis/Disjoint/ExistPred.java
Robust/src/Analysis/Disjoint/ExistPredSet.java
Robust/src/Analysis/Disjoint/HeapRegionNode.java
Robust/src/Analysis/Disjoint/ReachSet.java
Robust/src/Analysis/Disjoint/ReachState.java
Robust/src/Analysis/Disjoint/ReachTuple.java

index 6465366acca403c85bf5e9781896103ce8ff9f1b..317a9b4f2f175ad9361b9efb11e9e82125b3ad62 100644 (file)
@@ -36,8 +36,7 @@ abstract public class Canonical {
 
   public static Canonical makeCanonical( Canonical c ) {
 
-    if( c.isCanonical() ) {
-      assert canon.containsKey( c );
+    if( canon.containsKey( c ) ) {
       return canon.get( c );
     }
     
index ecd551de2e657881eeb17a410c40fd4bc5a58866..50d4a1515595dde1132527a527338dd5888abbb9 100644 (file)
@@ -74,9 +74,7 @@ public class ChangeSet extends Canonical {
     }
 
     ChangeSet cts = (ChangeSet) o;
-    assert this.isCanonical();
-    assert cts.isCanonical();
-    return this == cts;
+    return changeTuples.equals( cts.changeTuples );
   }
 
   public int hashCodeSpecific() {
index d192d217ea19c27608d487f9ac9dfdf5a0138f86..01bff33b0704f347eeabe0c079071b4d5f2bbf70 100644 (file)
@@ -64,9 +64,9 @@ public class ChangeTuple extends Canonical
     }
 
     ChangeTuple ct = (ChangeTuple) o;
-    assert this.isCanonical();
-    assert ct.isCanonical();
-    return this == ct;
+    return
+      toMatch.equals( ct.toMatch ) &&
+      toAdd.equals( ct.toAdd );
   }
 
   public int hashCodeSpecific() {
index 656610ec773ed642e471525e2f32f0f87a27110a..23ed5ade5998deb156fe6506c2a6817d5ce97c35 100644 (file)
@@ -588,17 +588,7 @@ public class DisjointAnalysis {
       ReachGraph heapForThisCall_cur = rg.makeCalleeView( fc, 
                                                           fmCallee );
 
-      
-      try {
-        heapForThisCall_old.writeGraph( "old_"+fc+"TO"+mdCallee, true, false, false, false, false, false );
-        heapForThisCall_cur.writeGraph( "cur_"+fc+"TO"+mdCallee, true, false, false, false, false, false );
-      } catch( IOException e ) {}
-
-
-      if( !heapForThisCall_cur.equals( heapForThisCall_old ) ) {
-
-        System.out.println( fc+"TO"+mdCallee+" not equal" );
-
+      if( !heapForThisCall_cur.equals( heapForThisCall_old ) ) {        
         // if heap at call site changed, update the contribution,
         // and reschedule the callee for analysis
         addIHMcontribution( mdCallee, fc, heapForThisCall_cur );        
index 404632f7c0be9147e6a015929a4a3535801f4e50..97daffd33ccd7b2c8a3a83caf8e866f7d1b56143 100644 (file)
@@ -78,12 +78,21 @@ public class ExistPred extends Canonical {
   
   protected ExistPred() {
     this.predType = TYPE_TRUE;
+    ne_state   = null;
+    n_hrnID    = null;
+    e_tdSrc    = null;
+    e_hrnSrcID = null;
+    e_hrnDstID = null;
+    e_type     = null;
+    e_field    = null;
   }
 
   // node predicates
   public static ExistPred factory( Integer    hrnID, 
                                    ReachState state ) {
+
     ExistPred out = new ExistPred( hrnID, state );
+
     out = (ExistPred) Canonical.makeCanonical( out );
     return out;
   }
@@ -94,6 +103,11 @@ public class ExistPred extends Canonical {
     this.n_hrnID  = hrnID;
     this.ne_state = state;
     this.predType = TYPE_NODE;
+    e_tdSrc    = null;
+    e_hrnSrcID = null;
+    e_hrnDstID = null;
+    e_type     = null;
+    e_field    = null;
   }
 
   // edge predicates
@@ -103,12 +117,14 @@ public class ExistPred extends Canonical {
                                    TypeDescriptor type,    
                                    String         field,   
                                    ReachState     state ) {
+
     ExistPred out = new ExistPred( tdSrc,   
                                    hrnSrcID,
                                    hrnDstID,
                                    type,    
                                    field,   
                                    state );
+
     out = (ExistPred) Canonical.makeCanonical( out );
     return out;
   }
@@ -135,6 +151,7 @@ public class ExistPred extends Canonical {
     this.e_field    = field;
     this.ne_state   = state;
     this.predType   = TYPE_EDGE;
+    n_hrnID = null;
   }
 
 
@@ -211,6 +228,7 @@ public class ExistPred extends Canonical {
   }
 
 
+
   public boolean equals( Object o ) {
     if( o == null ) {
       return false;
@@ -221,82 +239,69 @@ public class ExistPred extends Canonical {
     }
 
     ExistPred pred = (ExistPred) o;
-    assert this.isCanonical();
-    assert pred.isCanonical();
-    return this == pred;
-  }
-  /*
-  public boolean equals( Object o ) {
-    if( o == null ) {
-      return false;
-    }
 
-    if( !(o instanceof ExistPredNode) ) {
+    if( this.predType != pred.predType ) {
       return false;
     }
 
-    ExistPredNode epn = (ExistPredNode) o;
-
-    if( !hrnID.equals( epn.hrnID ) ) {
-      return false;
-    }
-
-    // ReachState objects are canonical
-    return state == epn.state;
-  }
-
-  public boolean equals( Object o ) {
-    if( o == null ) {
-      return false;
-    }
-
-    if( !(o instanceof ExistPredEdge) ) {
+    if( ne_state == null ) {
+      if( pred.ne_state != null ) {
+        return false;
+      }
+    } else if( !ne_state.equals( pred.ne_state ) ) {
       return false;
     }
-
-    ExistPredEdge epn = (ExistPredEdge) o;
-
-    this.tdSrc    = tdSrc;
-    this.hrnSrcID = hrnSrcID;
-    this.hrnDstID = hrnDstID;
-    this.type     = type;
-    this.field    = field;
-    this.state    = state;
-
-    if( tdSrc == null && epn.tdSrc != null ) {
-      return false;
-    } else if( !tdSrc.equals( epn.tdSrc ) ) {
+    
+    if( n_hrnID == null ) {
+      if( pred.n_hrnID != null ) {
+        return false;
+      }
+    } else if( !n_hrnID.equals( pred.n_hrnID ) ) {
       return false;
     }
-
-    if( hrnSrcID == null && epn.hrnSrcID != null ) {
-      return false;
-    } else if( !hrnSrcID.equals( epn.hrnSrcID ) ) {
+    
+    if( e_tdSrc == null ) {
+      if( pred.e_tdSrc != null ) {
+        return false;
+      }
+    } else if( !e_tdSrc.equals( pred.e_tdSrc ) ) {
       return false;
     }
 
-    if( !hrnDstID.equals( epn.hrnDstID ) ) {
+    if( e_hrnSrcID == null ) {
+      if( pred.e_hrnSrcID != null ) {
+        return false;
+      }
+    } else if( !e_hrnSrcID.equals( pred.e_hrnSrcID ) ) {
       return false;
     }
 
-    if( !type.equals( epn.type ) ) {
+    if( e_hrnDstID == null ) {
+      if( pred.e_hrnDstID != null ) {
+        return false;
+      }
+    } else if( !e_hrnDstID.equals( pred.e_hrnDstID ) ) {
       return false;
     }
-
-    if( field == null ) {
-      if( epn.field != null ) {
+    
+    if( e_type == null ) {
+      if( pred.e_type != null ) {
         return false;
       }
-    } else {
-      if( !field.equals( epn.field ) ) {
+    } else if( !e_type.equals( pred.e_type ) ) {
+      return false;
+    }
+    
+    if( e_field == null ) {
+      if( pred.e_field != null ) {
         return false;
       }
+    } else if( !e_field.equals( pred.e_field ) ) {
+      return false;
     }
 
-    // ReachState objects are cannonical
-    return state == epn.state;
+    return true;
   }
-  */  
 
 
   public int hashCodeSpecific() {
index 50c7edd68ada2b4ff59bbd540b4014b279ab5a53..124cec68316d81a0f1c98956336283fc00fbf17e 100644 (file)
@@ -71,9 +71,8 @@ public class ExistPredSet extends Canonical {
     }
 
     ExistPredSet eps = (ExistPredSet) o;
-    assert this.isCanonical();
-    assert eps.isCanonical();
-    return this == eps;
+
+    return preds.equals( eps.preds );
   }
 
 
index 0b190fc66901127db101605bbe5f31a496f2cb16..b0a4d44a16285c302a76e344911ec4663c70f6fe 100644 (file)
@@ -94,6 +94,7 @@ public class HeapRegionNode extends RefSrcNode {
   // fixed point, so use this method to determine if
   // a node is "equal" to some previous visit, basically
   public boolean equalsIncludingAlphaAndPreds( HeapRegionNode hrn ) {
+
     return equals( hrn ) && 
       alpha.equals( hrn.alpha ) && 
       preds.equals( hrn.preds );
index 0af32efa23d25fae6ed62a835f9b7a2e93cec0a0..62f60df34922215361b5955ba21abe759da4767b 100644 (file)
@@ -158,9 +158,7 @@ public class ReachSet extends Canonical {
     }
 
     ReachSet rs = (ReachSet) o;
-    assert this.isCanonical();
-    assert rs.isCanonical();
-    return this == rs;
+    return reachStates.equals( rs.reachStates );
   }
 
 
index e50520285f6e23bcd8d22bcebb8fe6dc40d5f155..22e7e79b48645a7295b9c8e9e499c928efa9ecb2 100644 (file)
@@ -97,9 +97,7 @@ public class ReachState extends Canonical {
     }
 
     ReachState rs = (ReachState) o;
-    assert this.isCanonical();
-    assert rs.isCanonical();
-    return this == rs;
+    return reachTuples.equals( rs.reachTuples );
   }
 
 
index 4a472cfa29dadd470f40d701d39f9dfc144a1f4c..70982d3244878aae3f7653a8e431721ebce889bd 100644 (file)
@@ -99,9 +99,9 @@ public class ReachTuple extends Canonical {
     }
 
     ReachTuple rt = (ReachTuple) o;
-    assert this.isCanonical();
-    assert rt.isCanonical();
-    return this == rt;
+    return 
+      hrnID.equals( rt.hrnID ) &&
+      arity == rt.arity;
   }
 
   public int hashCodeSpecific() {