X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FAnalysis%2FSSJava%2FSSJavaAnalysis.java;h=b18edaf4152f4120b13496f0cd8ea027eba4e300;hb=bb1740841625c379adb5c9220b165109adc13650;hp=121e4cb5fb135c56122f1f6dfbf25f0fbf72f017;hpb=d396c42d2a86460c7e220d21e5219049c177c5cf;p=IRC.git diff --git a/Robust/src/Analysis/SSJava/SSJavaAnalysis.java b/Robust/src/Analysis/SSJava/SSJavaAnalysis.java index 121e4cb5..b18edaf4 100644 --- a/Robust/src/Analysis/SSJava/SSJavaAnalysis.java +++ b/Robust/src/Analysis/SSJava/SSJavaAnalysis.java @@ -6,18 +6,19 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.StringTokenizer; import java.util.Vector; import Analysis.CallGraph.CallGraph; import Analysis.Loops.GlobalFieldType; -import Analysis.Loops.LoopFinder; import Analysis.Loops.LoopOptimize; import Analysis.Loops.LoopTerminate; import IR.AnnotationDescriptor; @@ -85,6 +86,9 @@ public class SSJavaAnalysis { // the set of method descriptors annotated as "TRUST" Set trustWorthyMDSet; + // method -> the initial program counter location + Map md2pcLoc; + // points to method containing SSJAVA Loop private MethodDescriptor methodContainingSSJavaLoop; @@ -124,6 +128,7 @@ public class SSJavaAnalysis { this.sameHeightWriteFlatNodeSet = new HashSet(); this.mapDescriptorToSetDependents = new Hashtable>(); this.sortedDescriptors = new LinkedList(); + this.md2pcLoc = new HashMap(); } public void doCheck() { @@ -407,9 +412,6 @@ public class SSJavaAnalysis { } else if (orderElement.startsWith(RETURNLOC + "=")) { String returnLoc = orderElement.substring(10); locOrder.setReturnLoc(returnLoc); - } else if (orderElement.startsWith(PCLOC + "=")) { - String pcLoc = orderElement.substring(6); - locOrder.setPCLoc(pcLoc); } else if (orderElement.endsWith("*")) { // spin loc definition locOrder.addSharedLoc(orderElement.substring(0, orderElement.length() - 1)); @@ -504,6 +506,19 @@ public class SSJavaAnalysis { } } + public CompositeLocation getPCLocation(MethodDescriptor md) { + if (!md2pcLoc.containsKey(md)) { + // by default, the initial pc location is TOP + CompositeLocation pcLoc = new CompositeLocation(new Location(md, Location.TOP)); + md2pcLoc.put(md, pcLoc); + } + return md2pcLoc.get(md); + } + + public void setPCLocation(MethodDescriptor md, CompositeLocation pcLoc) { + md2pcLoc.put(md, pcLoc); + } + public boolean needToCheckLinearType(MethodDescriptor md) { return linearTypeCheckMethodSet.contains(md); }