From b5f7ca0de0dbc3e8b6d0967d96c480740feea89d Mon Sep 17 00:00:00 2001 From: bdemsky Date: Thu, 27 Jan 2011 00:54:44 +0000 Subject: [PATCH] more changes --- Robust/src/Analysis/Pointer/Delta.java | 19 ++++++++++ Robust/src/Analysis/Pointer/Pointer.java | 45 ++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/Robust/src/Analysis/Pointer/Delta.java b/Robust/src/Analysis/Pointer/Delta.java index e7e7be70..842b6f7e 100644 --- a/Robust/src/Analysis/Pointer/Delta.java +++ b/Robust/src/Analysis/Pointer/Delta.java @@ -29,10 +29,29 @@ public class Delta { this.block=block; } + private Delta() { + } + public BBlock getBlock() { return block; } + public void setBlock(BBLock block) { + this.block=block; + } + + public Delta diffBlock(BBLock bblock) { + Delta newdelta=new Delta(); + newdelta.baseheapedge=baseheapedge; + newdelta.basevaredge=basevaredge; + newdelta.heapedgeadd=heapedgeadd; + newdelta.heapedgeremove=heapedgeremove; + newdelta.varedgeadd=varedgeadd; + newdelta.varedgeremove=varedgeremove; + newdelta.block=bblock; + return newdelta; + } + public boolean getInit() { return init; } diff --git a/Robust/src/Analysis/Pointer/Pointer.java b/Robust/src/Analysis/Pointer/Pointer.java index de72c898..93e80bd5 100644 --- a/Robust/src/Analysis/Pointer/Pointer.java +++ b/Robust/src/Analysis/Pointer/Pointer.java @@ -66,10 +66,49 @@ public class Pointer { Graph nodeGraph=graphMap.get(currNode); delta=processNode(currNode, delta, nodeGraph); } - //XXXX: Need to generate new delta + generateFinalDelta(nodeGraph, delta) } } + void generateFinalDelta(Delta delta, Graph graph) { + Delta newDelta=new Delta(null, false); + if (delta.isInit()) { + //First compute the set of temps + HashSet tmpSet=new HashSet(); + tmpSet.addAll(graph.varMap.keySet()); + tmpSet.addAll(graph.parent.varMap.keySet()); + + //Next build the temp map part of the delta + for(tmp:tmpSet) { + HashSet edgeSet=new HashSet(); + /* Get target set */ + if (graph.varMap.containsKey(tmp)) + edgeSet.addAll(graph.varMap.get(tmp)); + else + edgeSet.addAll(graph.parent.varMap.get(tmp)); + newdelta.varedgeadd.put(tmp, edgeset); + } + + //Next compute the set of src allocnodes + HashSet nodeSet=new HashSet(); + nodeSet.addAll(graph.nodeMap.keySet()); + nodeSet.addAll(graph.parent.nodeMap.keySet()); + + for(node:nodeSet) { + HashSet edgeSet=new HashSet(); + /* Get edge set */ + if (graph.nodeMap.containsKey(node)) + edgeSet.addAll(graph.nodeMap.get(node)); + else + edgeSet.addAll(graph.parent.nodeMap.get(node)); + newdelta.heapedgeadd.put(node, edgeset); + } + } else { + + + } + } + Delta processNode(FlatNode node, Delta delta, Graph newgraph) { switch(node.kind()) { case FKind.FlatNew: @@ -81,15 +120,15 @@ public class Pointer { case FKind.FlatOpNode: return processCopyNode(node, delta, newgraph); case FKind.FlatSetFieldNode: + case FKind.FlatSetElementNode: return processSetFieldElementNode(node, delta, newgraph); case FKind.FlatMethod: case FKind.FlatCall: case FKind.FlatReturnNode: - case FKind.FlatSetElementNode: case FKind.FlatExit: + case FKind.FlatSESEEnterNode: case FKind.FlatSESEExitNode: - throw new Error("Unimplemented node:"+node); default: throw new Error("Unrecognized node:"+node); -- 2.34.1