JS: minor fixup: only traverse LogNotExprs

This commit is contained in:
Esben Sparre Andreasen
2018-11-05 11:33:14 +01:00
parent 8ea9fd4cca
commit 15123da0b7

View File

@@ -73,16 +73,18 @@ predicate isConstantBooleanReturnValue(Expr e) {
isConstantBooleanReturnValue(e.(LogNotExpr).getOperand())
}
private Expr maybeStripLogNot(Expr e) {
result = maybeStripLogNot(e.(LogNotExpr).getOperand()) or
result = e
}
/**
* Holds if `e` is a defensive expression with a fixed outcome.
*/
predicate isConstantDefensive(Expr e) {
exists(Expr defensive |
defensive = e or
// traverse negations
defensive.(LogNotExpr).getOperand+() = e
|
exists(defensive.flow().(DefensiveExpressionTest).getTheTestResult())
exists(DefensiveExpressionTest defensive |
maybeStripLogNot(defensive.asExpr()) = e and
exists(defensive.getTheTestResult())
)
}