Address comments

This commit is contained in:
Arthur Baars
2021-02-09 13:54:46 +01:00
parent a752491c5f
commit bb89e134c4
6 changed files with 65 additions and 68 deletions

View File

@@ -39,11 +39,7 @@ class Statement extends AstNode {
class ReturningStatement extends Statement {
override ReturningStatement::Range range;
final override string toString() {
not exists(getValue()) and result = range.getStatementName()
or
result = range.getStatementName() + " " + getValue().toString()
}
final override string toString() { result = range.toString() }
/** Gets the returned value, if any. */
final Expr getValue() {

View File

@@ -8,8 +8,6 @@ module Statement {
module ReturningStatement {
abstract class Range extends Statement::Range {
abstract Generated::ArgumentList getArgumentList();
abstract string getStatementName();
}
}
@@ -17,7 +15,7 @@ module ReturnStmt {
class Range extends ReturningStatement::Range, @return {
final override Generated::Return generated;
final override string getStatementName() { result = "return" }
final override string toString() { result = "return" }
final override Generated::ArgumentList getArgumentList() { result = generated.getChild() }
}
@@ -27,7 +25,7 @@ module BreakStmt {
class Range extends ReturningStatement::Range, @break {
final override Generated::Break generated;
final override string getStatementName() { result = "break" }
final override string toString() { result = "break" }
final override Generated::ArgumentList getArgumentList() { result = generated.getChild() }
}
@@ -37,7 +35,7 @@ module NextStmt {
class Range extends ReturningStatement::Range, @next {
final override Generated::Next generated;
final override string getStatementName() { result = "next" }
final override string toString() { result = "next" }
final override Generated::ArgumentList getArgumentList() { result = generated.getChild() }
}

View File

@@ -249,7 +249,7 @@ module ExprNodes {
override predicate relevantChild(Expr e) { e = this.getValue() or e = this.getBranch(_) }
}
/** A control-flow node that wraps an `CaseExpr` AST expression. */
/** A control-flow node that wraps a `CaseExpr` AST expression. */
class CaseExprCfgNode extends ExprCfgNode {
override CaseExprChildMapping e;
@@ -259,16 +259,16 @@ module ExprNodes {
final ExprCfgNode getValue() { e.hasCfgChild(e.getValue(), this, result) }
/**
* Gets the `n`th branch of this case expression,
* Gets the `n`th branch of this case expression.
*/
final ExprCfgNode getBranch(int i) { e.hasCfgChild(e.getBranch(i), this, result) }
final ExprCfgNode getBranch(int n) { e.hasCfgChild(e.getBranch(n), this, result) }
}
private class ConditionalExprChildMapping extends ExprChildMapping, ConditionalExpr {
override predicate relevantChild(Expr e) { e = this.getCondition() or e = this.getBranch(_) }
}
/** A control-flow node that wraps an `ConditionalExpr` AST expression. */
/** A control-flow node that wraps a `ConditionalExpr` AST expression. */
class ConditionalExprCfgNode extends ExprCfgNode {
override ConditionalExprChildMapping e;
@@ -305,7 +305,7 @@ module ExprNodes {
override predicate relevantChild(Expr e) { e = this.getValue() }
}
/** A control-flow node that wraps an `ForExpr` AST expression. */
/** A control-flow node that wraps a `ForExpr` AST expression. */
class ForExprCfgNode extends ExprCfgNode {
override ForExprChildMapping e;
@@ -315,7 +315,7 @@ module ExprNodes {
final ExprCfgNode getValue() { e.hasCfgChild(e.getValue(), this, result) }
}
/** A control-flow node that wraps an `ParenthesizedExpr` AST expression. */
/** A control-flow node that wraps a `ParenthesizedExpr` AST expression. */
class ParenthesizedExprCfgNode extends ExprSequenceCfgNode {
ParenthesizedExprCfgNode() { this.getExpr() instanceof ParenthesizedExpr }
}

View File

@@ -133,20 +133,23 @@ private module Cached {
nodeFrom.asExpr() = nodeTo.asExpr().(CfgNodes::ExprNodes::CaseExprCfgNode).getBranch(_)
or
exists(CfgNodes::ExprCfgNode exprTo, ExprReturnNode n |
nodeFrom = n and exprTo = nodeTo.asExpr() and n.getKind() instanceof BreakReturnKind
|
nodeFrom = n and
exprTo = nodeTo.asExpr() and
n.getKind() instanceof BreakReturnKind and
exprTo.getNode() instanceof Loop and
nodeTo.asExpr().getAPredecessor(any(SuccessorTypes::BreakSuccessor s)) = n.getExprNode()
)
or
nodeFrom.asExpr() = nodeTo.(ExprReturnNode).getExprNode().getReturnedValueNode()
or
exists(CfgNodes::ExprNodes::ForExprCfgNode for | for = nodeTo.asExpr() |
exists(SuccessorType s, CfgNode n | not s instanceof SuccessorTypes::BreakSuccessor |
for.getAPredecessor(s) = n
) and
nodeFrom.asExpr() = for.getValue()
)
nodeTo.asExpr() =
any(CfgNodes::ExprNodes::ForExprCfgNode for |
exists(SuccessorType s |
not s instanceof SuccessorTypes::BreakSuccessor and
exists(for.getAPredecessor(s))
) and
nodeFrom.asExpr() = for.getValue()
)
}
cached