From 6e355f11cf15e3b09d9f564021dfb2e92bf68eef Mon Sep 17 00:00:00 2001 From: bdemsky Date: Tue, 25 Jan 2011 08:18:59 +0000 Subject: [PATCH] more changes --- Robust/src/Analysis/Pointer/AllocFactory.java | 2 +- Robust/src/Analysis/Pointer/Edge.java | 36 +++ Robust/src/Analysis/Pointer/Pointer.java | 223 +++++++++++++----- 3 files changed, 205 insertions(+), 56 deletions(-) diff --git a/Robust/src/Analysis/Pointer/AllocFactory.java b/Robust/src/Analysis/Pointer/AllocFactory.java index 98b130e7..29b8d445 100644 --- a/Robust/src/Analysis/Pointer/AllocFactory.java +++ b/Robust/src/Analysis/Pointer/AllocFactory.java @@ -49,7 +49,7 @@ public class AllocFactory { } public AllocNode getAllocNode(FlatNew node, boolean isSummary) { - int site=getSiteNumber(); + int site=getSiteNumber(node); AllocNode key=new AllocNode(site, node.getType(), isSummary); if (!allocNodeMap.containsKey(key)) { allocNodeMap.put(key, key); diff --git a/Robust/src/Analysis/Pointer/Edge.java b/Robust/src/Analysis/Pointer/Edge.java index 5048f830..54a9c048 100644 --- a/Robust/src/Analysis/Pointer/Edge.java +++ b/Robust/src/Analysis/Pointer/Edge.java @@ -9,6 +9,9 @@ public class Edge { TempDescriptor srcvar; AllocNode dst; + private Edge() { + } + public Edge(AllocNode src, FieldDescriptor fd, AllocNode dst) { this.src=src; this.fd=fd; @@ -20,4 +23,37 @@ public class Edge { this.dst=dst; } + public int hashCode() { + int hashcode=dst.hashCode(); + if (fd!=null) { + hashcode^=fd.hashCode(); + } + if (src!=null) { + hashcode^=(src.hashCode()<<3); + } else { + hashcode^=(srcvar.hashCode()<<3); + } + return hashcode; + } + + public boolean equals(Object o) { + if (o instanceof Edge) { + Edge e=(Edge) o; + if (srcvar!=null) { + return (srcvar==e.srcvar)&&(dst==e.dst); + } else { + return (src==e.src)&&(dst==e.dst)&&(fd==e.fd); + } + } + return false; + } + + public Edge copy() { + Edge e=new Edge(); + e.fd=fd; + e.src=src; + e.srcvar=srcvar; + e.dst=dst; + return e; + } } \ No newline at end of file diff --git a/Robust/src/Analysis/Pointer/Pointer.java b/Robust/src/Analysis/Pointer/Pointer.java index 5769bd53..d11827ab 100644 --- a/Robust/src/Analysis/Pointer/Pointer.java +++ b/Robust/src/Analysis/Pointer/Pointer.java @@ -36,8 +36,12 @@ public class Pointer { BasicBlock bb=getBBlock(fm); BBlock start=bb.getStart(); Delta delta=new Delta(start, true); - delta.addHeapEdge(allocFactory.StringArray, new Edge(allocFactory.StringArray, null, allocFactory.Strings)); - delta.addVarEdge(fm.getParameter(0), new Edge(fm.getParameter(0), allocFactory.StringArray)); + HashSet arrayset=new HashSet(); + HashSet varset=new HashSet(); + arrayset.add(new Edge(allocFactory.StringArray, null, allocFactory.Strings)); + varset.add(new Edge(fm.getParameter(0), allocFactory.StringArray)); + delta.heapedgeadd.put(allocFactory.StringArray, arrayset); + delta.varedgeadd.put(fm.getParameter(0), varset); return delta; } @@ -51,8 +55,8 @@ public class Pointer { //Build base graph for entrance to this basic block delta=applyInitDelta(delta, bblock); + Graph graph=bbgraphMap.get(bblock); - Graph prevGraph=graph; //Compute delta at exit of each node for(int i=0; i