projects
/
IRC.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
96a27ba
)
Added implicit flow for if statements
author
david
<david>
Wed, 7 Sep 2011 00:53:20 +0000
(
00:53
+0000)
committer
david
<david>
Wed, 7 Sep 2011 00:53:20 +0000
(
00:53
+0000)
Robust/src/Analysis/SSJava/SSJavaInferenceEngine.java
patch
|
blob
|
history
diff --git
a/Robust/src/Analysis/SSJava/SSJavaInferenceEngine.java
b/Robust/src/Analysis/SSJava/SSJavaInferenceEngine.java
index d9c816007df146bf01c6b239d07c66ae592a380a..e6c34ce9fd7b78751b2bcb295a2f2349cadfdfe1 100644
(file)
--- a/
Robust/src/Analysis/SSJava/SSJavaInferenceEngine.java
+++ b/
Robust/src/Analysis/SSJava/SSJavaInferenceEngine.java
@@
-241,11
+241,11
@@
public class SSJavaInferenceEngine {
case Kind.DeclarationNode:
inferRelationsFromDeclarationNode(md, nametable, (DeclarationNode) bsn);
break;
case Kind.DeclarationNode:
inferRelationsFromDeclarationNode(md, nametable, (DeclarationNode) bsn);
break;
- /*
+
case Kind.IfStatementNode:
inferRelationsFromIfStatementNode(md, nametable, (IfStatementNode) bsn);
break;
case Kind.IfStatementNode:
inferRelationsFromIfStatementNode(md, nametable, (IfStatementNode) bsn);
break;
-
+ /*
case Kind.LoopNode:
inferRelationsFromLoopNode(md, nametable, (LoopNode) bsn, constraint);
break;
case Kind.LoopNode:
inferRelationsFromLoopNode(md, nametable, (LoopNode) bsn, constraint);
break;
@@
-253,18
+253,22
@@
public class SSJavaInferenceEngine {
case Kind.ReturnNode:
inferRelationsFromReturnNode(md, nametable, (ReturnNode) bsn, constraint);
break;
case Kind.ReturnNode:
inferRelationsFromReturnNode(md, nametable, (ReturnNode) bsn, constraint);
break;
-
+ */
case Kind.SubBlockNode:
case Kind.SubBlockNode:
- inferRelationsFromSubBlockNode(md, nametable, (SubBlockNode) bsn
, constraint
);
+ inferRelationsFromSubBlockNode(md, nametable, (SubBlockNode) bsn);
break;
break;
-
+ /*
case Kind.ContinueBreakNode:
compLoc = new CompositeLocation();
break;
case Kind.SwitchStatementNode:
inferRelationsFromSwitchStatementNode(md, nametable, (SwitchStatementNode) bsn, constraint);
case Kind.ContinueBreakNode:
compLoc = new CompositeLocation();
break;
case Kind.SwitchStatementNode:
inferRelationsFromSwitchStatementNode(md, nametable, (SwitchStatementNode) bsn, constraint);
- */
+ break;
+*/
+ default:
+ System.out.println(bsn.kind() + " not handled...");
+ break;
}
}
}
}
@@
-379,42
+383,31
@@
public class SSJavaInferenceEngine {
}
}
}
}
-
- private CompositeLocation inferRelationsFromSubBlockNode(MethodDescriptor md,
- SymbolTable nametable, SubBlockNode sbn, CompositeLocation constraint) {
- CompositeLocation compLoc =
- inferRelationsFromBlockNode(md, nametable, sbn.getBlockNode(), constraint);
- return compLoc;
+ */
+ private void inferRelationsFromSubBlockNode(MethodDescriptor md,
+ SymbolTable nametable, SubBlockNode sbn) {
+ inferRelationsFromBlockNode(md, nametable, sbn.getBlockNode());
}
}
- private CompositeLocation generateNewConstraint(CompositeLocation currentCon,
- CompositeLocation newCon) {
-
- if (currentCon == null) {
- return newCon;
- } else {
- // compute GLB of current constraint and new constraint
- Set<CompositeLocation> inputSet = new HashSet<CompositeLocation>();
- inputSet.add(currentCon);
- inputSet.add(newCon);
- return CompositeLattice.calculateGLB(inputSet, "");
- }
-
- }
-
+
private void inferRelationsFromIfStatementNode(MethodDescriptor md,
SymbolTable nametable, IfStatementNode isn) {
private void inferRelationsFromIfStatementNode(MethodDescriptor md,
SymbolTable nametable, IfStatementNode isn) {
-
inferRelationsFromExpressionNode(md, nametable, isn.getCondition(), null
, false);
+
inferRelationsFromExpressionNode(md, nametable, isn.getCondition(), null, isn
, false);
- constraint = generateNewConstraint(constraint, condLoc);
- inferRelationFromBlockNode(md, nametable, isn.getTrueBlock(), constraint);
+ inferRelationsFromBlockNode(md, nametable, isn.getTrueBlock());
if (isn.getFalseBlock() != null) {
if (isn.getFalseBlock() != null) {
- inferRelationsFromBlockNode(md, nametable, isn.getFalseBlock(), constraint);
+ inferRelationsFromBlockNode(md, nametable, isn.getFalseBlock());
+ }
+
+ for(ImplicitTuple tuple: implicitFlowSet){
+ if(tuple.isFromBranch(isn)){
+ implicitFlowSet.remove(tuple);
+ }
}
}
}
}
- */
+
private void inferRelationsFromDeclarationNode(MethodDescriptor md,
SymbolTable nametable, DeclarationNode dn) {
}
private void inferRelationsFromDeclarationNode(MethodDescriptor md,
SymbolTable nametable, DeclarationNode dn) {
}
@@
-426,19
+419,19
@@
public class SSJavaInferenceEngine {
private void inferRelationsFromBlockExpressionNode(MethodDescriptor md,
SymbolTable nametable, BlockExpressionNode ben) {
private void inferRelationsFromBlockExpressionNode(MethodDescriptor md,
SymbolTable nametable, BlockExpressionNode ben) {
- inferRelationsFromExpressionNode(md, nametable, ben.getExpression(), null, false);
+ inferRelationsFromExpressionNode(md, nametable, ben.getExpression(), null,
null,
false);
// addTypeLocation(ben.getExpression().getType(), compLoc);
}
private VarID inferRelationsFromExpressionNode(MethodDescriptor md,
// addTypeLocation(ben.getExpression().getType(), compLoc);
}
private VarID inferRelationsFromExpressionNode(MethodDescriptor md,
-
SymbolTable nametable, ExpressionNode en, VarID flowTo
, boolean isLHS) {
+
SymbolTable nametable, ExpressionNode en, VarID flowTo, BlockStatementNode implicitTag
, boolean isLHS) {
VarID var = null;
switch (en.kind()) {
case Kind.AssignmentNode:
var =
VarID var = null;
switch (en.kind()) {
case Kind.AssignmentNode:
var =
- inferRelationsFromAssignmentNode(md, nametable, (AssignmentNode) en, flowTo);
+ inferRelationsFromAssignmentNode(md, nametable, (AssignmentNode) en, flowTo
, implicitTag
);
break;
// case Kind.FieldAccessNode:
break;
// case Kind.FieldAccessNode:
@@
-447,7
+440,7
@@
public class SSJavaInferenceEngine {
// break;
case Kind.NameNode:
// break;
case Kind.NameNode:
- var = inferRelationsFromNameNode(md, nametable, (NameNode) en, flowTo);
+ var = inferRelationsFromNameNode(md, nametable, (NameNode) en, flowTo
, implicitTag
);
break;
/* case Kind.OpNode:
break;
/* case Kind.OpNode:
@@
-498,6
+491,7
@@
public class SSJavaInferenceEngine {
// return null;
default:
// return null;
default:
+ System.out.println("expressionnode not handled...");
return null;
}
return null;
}
@@
-926,12
+920,12
@@
public class SSJavaInferenceEngine {
}
private VarID inferRelationsFromNameNode(MethodDescriptor md, SymbolTable nametable,
}
private VarID inferRelationsFromNameNode(MethodDescriptor md, SymbolTable nametable,
-
NameNode nn, VarID flowTo
) {
+
NameNode nn, VarID flowTo, BlockStatementNode implicitTag
) {
VarID var = null;
NameDescriptor nd = nn.getName();
if (nd.getBase() != null) {
var =
VarID var = null;
NameDescriptor nd = nn.getName();
if (nd.getBase() != null) {
var =
- inferRelationsFromExpressionNode(md, nametable, nn.getExpression(), flowTo, false);
+ inferRelationsFromExpressionNode(md, nametable, nn.getExpression(), flowTo,
implicitTag,
false);
} else {
String varname = nd.toString();
if (varname.equals("this")) {
} else {
String varname = nd.toString();
if (varname.equals("this")) {
@@
-939,6
+933,9
@@
public class SSJavaInferenceEngine {
if(flowTo != null){
rSet.addRelation(new BinaryRelation(var,flowTo));
}
if(flowTo != null){
rSet.addRelation(new BinaryRelation(var,flowTo));
}
+ if(implicitTag != null){
+ implicitFlowSet.add(new ImplicitTuple(var,implicitTag));
+ }
var.setThis();
return var;
}
var.setThis();
return var;
}
@@
-950,6
+947,9
@@
public class SSJavaInferenceEngine {
if(flowTo != null){
rSet.addRelation(new BinaryRelation(var,flowTo));
}
if(flowTo != null){
rSet.addRelation(new BinaryRelation(var,flowTo));
}
+ if(implicitTag != null){
+ implicitFlowSet.add(new ImplicitTuple(var,implicitTag));
+ }
} else if (d instanceof FieldDescriptor) {
FieldDescriptor fd = (FieldDescriptor) d;
if (fd.isStatic()) {
} else if (d instanceof FieldDescriptor) {
FieldDescriptor fd = (FieldDescriptor) d;
if (fd.isStatic()) {
@@
-958,6
+958,9
@@
public class SSJavaInferenceEngine {
if(flowTo != null){
rSet.addRelation(new BinaryRelation(var,flowTo));
}
if(flowTo != null){
rSet.addRelation(new BinaryRelation(var,flowTo));
}
+ if(implicitTag != null){
+ implicitFlowSet.add(new ImplicitTuple(var,implicitTag));
+ }
var.setTop();
return var;
} else {
var.setTop();
return var;
} else {
@@
-965,6
+968,9
@@
public class SSJavaInferenceEngine {
if(flowTo != null){
rSet.addRelation(new BinaryRelation(var,flowTo));
}
if(flowTo != null){
rSet.addRelation(new BinaryRelation(var,flowTo));
}
+ if(implicitTag != null){
+ implicitFlowSet.add(new ImplicitTuple(var,implicitTag));
+ }
var.setGlobal();
}
} else {
var.setGlobal();
}
} else {
@@
-972,13
+978,19
@@
public class SSJavaInferenceEngine {
if(flowTo != null){
rSet.addRelation(new BinaryRelation(var,flowTo));
}
if(flowTo != null){
rSet.addRelation(new BinaryRelation(var,flowTo));
}
+ if(implicitTag != null){
+ implicitFlowSet.add(new ImplicitTuple(var,implicitTag));
+ }
var.setThis();
}
} else if (d == null) {
var = new VarID(nd);
var.setThis();
}
} else if (d == null) {
var = new VarID(nd);
- if(flowTo != null){
- rSet.addRelation(new BinaryRelation(var,flowTo));
- }
+ if(flowTo != null){
+ rSet.addRelation(new BinaryRelation(var,flowTo));
+ }
+ if(implicitTag != null){
+ implicitFlowSet.add(new ImplicitTuple(var,implicitTag));
+ }
var.setGlobal();
return var;
}
var.setGlobal();
return var;
}
@@
-1038,7
+1050,7
@@
public class SSJavaInferenceEngine {
}*/
private VarID inferRelationsFromAssignmentNode(MethodDescriptor md,
}*/
private VarID inferRelationsFromAssignmentNode(MethodDescriptor md,
-
SymbolTable nametable, AssignmentNode an, VarID flowTo
) {
+
SymbolTable nametable, AssignmentNode an, VarID flowTo, BlockStatementNode implicitTag
) {
ClassDescriptor cd = md.getClassDesc();
boolean postinc = true;
ClassDescriptor cd = md.getClassDesc();
boolean postinc = true;
@@
-1047,15
+1059,15
@@
public class SSJavaInferenceEngine {
.getBaseOp().getOp() != Operation.POSTDEC))
postinc = false;
//get ID for leftside
.getBaseOp().getOp() != Operation.POSTDEC))
postinc = false;
//get ID for leftside
- VarID destID = inferRelationsFromExpressionNode(md, nametable, an.getDest(), flowTo, true);
+ VarID destID = inferRelationsFromExpressionNode(md, nametable, an.getDest(), flowTo,
implicitTag,
true);
if (!postinc) {
//recursively add relations from RHS to LHS
if (!postinc) {
//recursively add relations from RHS to LHS
-
inferRelationsFromExpressionNode(md, nametable, an.getSrc(), destID
, false);
+
inferRelationsFromExpressionNode(md, nametable, an.getSrc(), destID, null
, false);
} else {
//add relation to self
} else {
//add relation to self
-
destID = inferRelationsFromExpressionNode(md, nametable, an.getDest(), destID
, false);
+
destID = inferRelationsFromExpressionNode(md, nametable, an.getDest(), destID, null
, false);
}
//checks if flow to anythin and adds relation
}
//checks if flow to anythin and adds relation
@@
-1067,6
+1079,7
@@
public class SSJavaInferenceEngine {
for(ImplicitTuple it: implicitFlowSet){
rSet.addRelation(new BinaryRelation(it.getVar(),destID));
}
for(ImplicitTuple it: implicitFlowSet){
rSet.addRelation(new BinaryRelation(it.getVar(),destID));
}
+
return destID;
}
}
\ No newline at end of file
return destID;
}
}
\ No newline at end of file