Skip to content
Snippets Groups Projects
Commit 2aa86825 authored by Johannes Mey's avatar Johannes Mey
Browse files

separate analysis and cfg a bit more

parent 7b25d235
No related branches found
No related tags found
No related merge requests found
aspect Helpers {
syn boolean List.contains(ASTNode other) {
for (ASTNode node : this) {
if (node.equals(other)) return true;
}
return false;
}
}
......@@ -28,16 +28,15 @@ aspect VariableDeclarationScope {
syn boolean CfgNode.isDeclarationOf(Variable var) = false;
eq CfgBranch.isDeclarationOf(Variable var) =
branchDeclaresVariable(var)
|| variableDeclaredInsideStatement(var);
getHostStatement().declaresVariable(var)
|| getHostStatement().variableDeclaredInside(var);
syn boolean CfgBranch.variableDeclaredInsideStatement(Variable var) {
Stmt stmt = getHostStatement();
syn boolean Stmt.variableDeclaredInside(Variable var) {
ASTNode node = (ASTNode) var;
while (node != stmt && node != null) {
while (node != this && node != null) {
node = node.getParent();
}
return node == stmt;
return node == this;
}
/** The statement this expression is part of. */
......@@ -45,16 +44,15 @@ aspect VariableDeclarationScope {
eq Stmt.getChild().hostStatement() = this;
eq Program.getChild().hostStatement() = null;
/** Test if the CFG node is tied to a statement that declares the variable. */
inh boolean CfgBranch.branchDeclaresVariable(Variable var);
eq EnhancedForStmt.branch().branchDeclaresVariable(Variable var) =
getVariableDecl() == var;
eq IfStmt.branch().branchDeclaresVariable(Variable var) = false;
eq ConditionalExpr.branch().branchDeclaresVariable(Variable var) = false;
eq ForStmt.branch().branchDeclaresVariable(Variable var) = false;
eq WhileStmt.branch().branchDeclaresVariable(Variable var) = false;
eq DoStmt.branch().branchDeclaresVariable(Variable var) = false;
eq SwitchStmt.branch().branchDeclaresVariable(Variable var) = false;
/** Test if a statement declares a variable */
syn boolean Stmt.declaresVariable(Variable var) = false;
eq VarDeclStmt.declaresVariable(Variable var) = getDeclaratorList().contains((ASTNode)var);
eq EnhancedForStmt.declaresVariable(Variable var) = getVariableDecl() == var;
eq Block.declaresVariable(Variable var) {
for (Stmt stmt : getStmtList()) {
if (stmt.declaresVariable(var)) return true;
}
return false;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment