projects
/
IRC.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
changes.
[IRC.git]
/
Robust
/
src
/
Analysis
/
SSJava
/
FlowGraph.java
diff --git
a/Robust/src/Analysis/SSJava/FlowGraph.java
b/Robust/src/Analysis/SSJava/FlowGraph.java
index 39d706144144bcbe0d35333d6d4b30794498305b..8dbecd3c00c2f603b7a9aa081815c4602bbd9514 100644
(file)
--- a/
Robust/src/Analysis/SSJava/FlowGraph.java
+++ b/
Robust/src/Analysis/SSJava/FlowGraph.java
@@
-13,6
+13,7
@@
import IR.ClassDescriptor;
import IR.Descriptor;
import IR.FieldDescriptor;
import IR.MethodDescriptor;
import IR.Descriptor;
import IR.FieldDescriptor;
import IR.MethodDescriptor;
+import IR.NameDescriptor;
import IR.VarDescriptor;
public class FlowGraph {
import IR.VarDescriptor;
public class FlowGraph {
@@
-37,6
+38,8
@@
public class FlowGraph {
Map<Integer, FlowNode> mapIdxToFlowNode;
Map<Integer, FlowNode> mapIdxToFlowNode;
+ public static int interseed = 0;
+
boolean debug = true;
public FlowGraph(MethodDescriptor md, Map<Descriptor, Integer> mapParamDescToIdx) {
boolean debug = true;
public FlowGraph(MethodDescriptor md, Map<Descriptor, Integer> mapParamDescToIdx) {
@@
-66,6
+69,15
@@
public class FlowGraph {
}
}
+ public FlowNode createIntermediateNode() {
+ NTuple<Descriptor> tuple = new NTuple<Descriptor>();
+ Descriptor interDesc = new InterDescriptor(LocationInference.INTERLOC + interseed);
+ tuple.add(interDesc);
+ interseed++;
+ FlowNode node = createNewFlowNode(tuple, true);
+ return node;
+ }
+
private void setupMapIdxToDesc() {
Set<Descriptor> descSet = mapParamDescToIdx.keySet();
private void setupMapIdxToDesc() {
Set<Descriptor> descSet = mapParamDescToIdx.keySet();
@@
-194,9
+206,14
@@
public class FlowGraph {
}
public FlowNode createNewFlowNode(NTuple<Descriptor> tuple) {
}
public FlowNode createNewFlowNode(NTuple<Descriptor> tuple) {
+ return createNewFlowNode(tuple, false);
+ }
+
+ public FlowNode createNewFlowNode(NTuple<Descriptor> tuple, boolean isIntermediate) {
if (!mapDescTupleToInferNode.containsKey(tuple)) {
FlowNode node = new FlowNode(tuple, isParameter(tuple));
if (!mapDescTupleToInferNode.containsKey(tuple)) {
FlowNode node = new FlowNode(tuple, isParameter(tuple));
+ node.setIntermediate(isIntermediate);
mapDescTupleToInferNode.put(tuple, node);
nodeSet.add(node);
mapDescTupleToInferNode.put(tuple, node);
nodeSet.add(node);
@@
-285,7
+302,12
@@
public class FlowGraph {
ClassDescriptor cd = null;
Descriptor localDesc = fn.getDescTuple().get(0);
ClassDescriptor cd = null;
Descriptor localDesc = fn.getDescTuple().get(0);
- if (localDesc.getSymbol().equals(LocationInference.TOPLOC)) {
+
+ if (fn.isIntermediate()) {
+ Location interLoc = new Location(md, localDesc.getSymbol());
+ interLoc.setLocDescriptor(localDesc);
+ locTuple.add(interLoc);
+ } else if (localDesc.getSymbol().equals(LocationInference.TOPLOC)) {
Location topLoc = new Location(md, Location.TOP);
topLoc.setLocDescriptor(LocationInference.TOPDESC);
locTuple.add(topLoc);
Location topLoc = new Location(md, Location.TOP);
topLoc.setLocDescriptor(LocationInference.TOPDESC);
locTuple.add(topLoc);