changes.
[IRC.git] / Robust / src / Analysis / SSJava / SSJavaLattice.java
index c7b89709142052a64b51db96a750558a38ca59eb..89ca9af541c0a4ee5ffbc4fcbe04a86b249c9872 100644 (file)
@@ -91,6 +91,7 @@ public class SSJavaLattice<T> extends Lattice<T> {
         getInBetweenElements(cur, end, elementSet);
       }
     }
+    System.out.println("            start=" + start + " end=" + end + "   element=" + elementSet);
   }
 
   public void mergeIntoSharedLocation(Set<T> cycleSet, T newLoc) {
@@ -149,6 +150,34 @@ public class SSJavaLattice<T> extends Lattice<T> {
 
   }
 
+  public void remove(T loc) {
+
+    Set<T> keySet = getKeySet();
+
+    Set<T> inSet = new HashSet<T>();
+    for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
+      T keyElement = (T) iterator.next();
+      Set<T> connectedSet = get(keyElement);
+      if (connectedSet.contains(loc)) {
+        inSet.add(loc);
+        connectedSet.remove(loc);
+      }
+    }
+
+    Set<T> outSet = get(loc);
+
+    for (Iterator iterator = inSet.iterator(); iterator.hasNext();) {
+      T in = (T) iterator.next();
+      for (Iterator iterator2 = outSet.iterator(); iterator2.hasNext();) {
+        T out = (T) iterator2.next();
+        put(in, out);
+      }
+    }
+
+    getTable().remove(loc);
+
+  }
+
   public void substituteLocation(T oldLoc, T newLoc) {
     // the new location is going to take all relations of the old location
     if (!getKeySet().contains(newLoc)) {