support basic generators

This commit is contained in:
Erik Krogh Kristensen
2020-08-25 14:13:15 +02:00
parent 592ed8a3a1
commit afaaea8922
3 changed files with 23 additions and 1 deletions

View File

@@ -0,0 +1,21 @@
import javascript
private import semmle.javascript.dataflow.internal.PreCallGraphStep
/**
* Classes and predicates for modelling data-flow for generator functions.
*/
private module GeneratorDataFlow {
private import DataFlow::PseudoProperties
private class ArrayIteration extends PreCallGraphStep {
override predicate storeStep(DataFlow::Node pred, DataFlow::SourceNode succ, string prop) {
exists(DataFlow::FunctionNode f | f.getFunction().isGenerator() |
prop = iteratorElement() and
exists(YieldExpr yield | yield.getContainer() = f.getFunction() |
pred.asExpr() = yield.getOperand()
) and
succ = f.getReturnNode()
)
}
}
}