mirror of
https://github.com/github/codeql.git
synced 2025-12-24 04:36:35 +01:00
Python: move things around
This commit is contained in:
@@ -388,23 +388,27 @@ module LocalFlow {
|
|||||||
module VariableCapture {
|
module VariableCapture {
|
||||||
private import codeql.dataflow.VariableCapture as Shared
|
private import codeql.dataflow.VariableCapture as Shared
|
||||||
|
|
||||||
class ExprCfgNode extends ControlFlowNode {
|
|
||||||
ExprCfgNode() { isExpressionNode(this) }
|
|
||||||
}
|
|
||||||
|
|
||||||
private predicate closureFlowStep(ExprCfgNode nodeFrom, ExprCfgNode nodeTo) {
|
|
||||||
// TODO: Other languages have an extra case here looking like
|
|
||||||
// simpleAstFlowStep(nodeFrom, nodeTo)
|
|
||||||
// we should investigate the potential benefit of adding that.
|
|
||||||
exists(SsaVariable def |
|
|
||||||
def.getAUse() = nodeTo and
|
|
||||||
def.getAnUltimateDefinition().getDefinition().(DefinitionNode).getValue() = nodeFrom
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private module CaptureInput implements Shared::InputSig<Location> {
|
private module CaptureInput implements Shared::InputSig<Location> {
|
||||||
private import python as PY
|
private import python as PY
|
||||||
|
|
||||||
|
additional class ExprCfgNode extends ControlFlowNode {
|
||||||
|
ExprCfgNode() { isExpressionNode(this) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private predicate closureFlowStep(ExprCfgNode nodeFrom, ExprCfgNode nodeTo) {
|
||||||
|
// TODO: Other languages have an extra case here looking like
|
||||||
|
// simpleAstFlowStep(nodeFrom, nodeTo)
|
||||||
|
// we should investigate the potential benefit of adding that.
|
||||||
|
exists(SsaVariable def |
|
||||||
|
def.getAUse() = nodeTo and
|
||||||
|
def.getAnUltimateDefinition().getDefinition().(DefinitionNode).getValue() = nodeFrom
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
class Callable extends Scope {
|
||||||
|
predicate isConstructor() { none() }
|
||||||
|
}
|
||||||
|
|
||||||
class BasicBlock extends PY::BasicBlock {
|
class BasicBlock extends PY::BasicBlock {
|
||||||
Callable getEnclosingCallable() { result = this.getScope() }
|
Callable getEnclosingCallable() { result = this.getScope() }
|
||||||
|
|
||||||
@@ -482,10 +486,6 @@ module VariableCapture {
|
|||||||
|
|
||||||
predicate hasAliasedAccess(Expr f) { closureFlowStep+(this, f) and not closureFlowStep(f, _) }
|
predicate hasAliasedAccess(Expr f) { closureFlowStep+(this, f) and not closureFlowStep(f, _) }
|
||||||
}
|
}
|
||||||
|
|
||||||
class Callable extends Scope {
|
|
||||||
predicate isConstructor() { none() }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class CapturedVariable = CaptureInput::CapturedVariable;
|
class CapturedVariable = CaptureInput::CapturedVariable;
|
||||||
|
|||||||
Reference in New Issue
Block a user