more changes
authorbdemsky <bdemsky>
Tue, 25 Jan 2011 09:11:59 +0000 (09:11 +0000)
committerbdemsky <bdemsky>
Tue, 25 Jan 2011 09:11:59 +0000 (09:11 +0000)
Robust/src/Analysis/Pointer/Graph.java
Robust/src/Analysis/Pointer/Pointer.java

index 6f01836a094381c544948205fd6dfad2f685cdf7..9b801573e4ee634b6cf3c033d0a8f6b75a3bccbd 100644 (file)
@@ -21,6 +21,14 @@ public class Graph {
     this.parent=parent;
   }
 
+  public HashSet<Edge> getEdges(TempDescriptor tmp) {
+    if (varMap.containsKey(tmp))
+      return varMap.get(tmp);
+    else if (parent!=null&&parent.varMap.containsKey(tmp))
+      return parent.varMap.get(tmp);
+    else return emptySet;
+  }
+
   public HashSet<Edge> getEdges(AllocNode node) {
     if (nodeMap.containsKey(node))
       return nodeMap.get(node);
index d11827abb36d0d2a5657a5cd7d7d68df154c6930..cd474145332b792748a9dda51ba2e1fffc1c3b03 100644 (file)
@@ -74,8 +74,9 @@ public class Pointer {
     switch(node.kind()) {
     case FKind.FlatNew:
       return processNewNode((FlatNew)node, delta, newgraph);
-    case FKind.FlatCall:
     case FKind.FlatFieldNode:
+      return processFieldNode((FlatFieldNode)node, delta, newgraph);
+    case FKind.FlatCall:
     case FKind.FlatSetFieldNode:
     case FKind.FlatReturnNode:
     case FKind.FlatElementNode:
@@ -154,6 +155,36 @@ public class Pointer {
     }
   }
 
+  HashSet<AllocNode> getTemps(Graph graph, Delta delta, TempDescriptor tmp) {
+    HashSet<AllocNode> nodes=new HashSet<AllocNode>();
+    HashSet<Edge> removeedges=delta.varedgeremove.get(tmp);
+
+    for(Edge e:graph.getEdges(tmp)) {
+      if (removeedges==null||!removeedges.contains(e))
+       nodes.add(e.dst);
+    }
+    if (delta.varedgeadd.containsKey(tmp))
+      for(Edge e:delta.varedgeadd.get(tmp)) {
+       nodes.add(e.dst);
+      }
+    return nodes;
+  }
+
+  Delta processFieldNode(FlatFieldNode node, Delta delta, Graph graph) {
+    TempDescriptor src=node.getSrc();
+    FieldDescriptor fd=node.getField();
+    TempDescriptor dst=node.getDst();
+    if (delta.getInit()) {
+      HashSet<AllocNode> nodes=getTemps(graph, delta, src);
+      
+      
+      applyDiffs(graph, delta);
+    } else {
+
+    }
+    return delta;
+  }
+
   Delta processNewNode(FlatNew node, Delta delta, Graph graph) {
     AllocNode summary=allocFactory.getAllocNode(node, true);
     AllocNode single=allocFactory.getAllocNode(node, false);
@@ -168,7 +199,7 @@ public class Pointer {
       //Add it into the diffs
       delta.varedgeadd.put(tmp, newedges);
       //Remove the old edges
-      delta.varedgeremove.put(tmp, delta.basevaredge.get(tmp));
+      delta.varedgeremove.put(tmp, graph.getEdges(tmp));
       //Apply incoming diffs to graph
       applyDiffs(graph, delta);
     } else {