diff --git a/python/ql/src/semmle/python/Flow.qll b/python/ql/src/semmle/python/Flow.qll index e68800022ed7..baa938a55956 100755 --- a/python/ql/src/semmle/python/Flow.qll +++ b/python/ql/src/semmle/python/Flow.qll @@ -661,6 +661,8 @@ class DefinitionNode extends ControlFlowNode { exists(Assign a | list_or_tuple_nested_element(a.getATarget()).getAFlowNode() = this) or exists(For for | for.getTarget().getAFlowNode() = this) + or + exists(With with | with.getOptionalVars().getAFlowNode() = this) } /** flow node corresponding to the value assigned for the definition corresponding to this flow node */ @@ -791,6 +793,11 @@ private AstNode assigned_value(Expr lhs) { or /* for lhs in seq: => `result` is the `for` node, representing the `iter(next(seq))` operation. */ result.(For).getTarget() = lhs + or + exists(With with | + result = with.getContextExpr() and + lhs = with.getOptionalVars() + ) } predicate nested_sequence_assign( diff --git a/python/ql/src/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/src/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index e25a740bd0bc..19e2d9d602b0 100644 --- a/python/ql/src/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/src/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -97,9 +97,9 @@ class SyntheticPostUpdateNode extends PostUpdateNode, TSyntheticPostUpdateNode { } /** - * Calls to constructors are treated as post-update nodes for the synthesized argument + * Calls to constructors act as post-update nodes for the synthesized argument * that is mapped to the `self` parameter. That way, constructor calls represent the value of the - * object after the constructor (currently only `__init__`) has run. + * object _after_ the constructor (currently only `__init__`) has run. */ class ObjectCreationNode extends PostUpdateNode, NeedsSyntheticPreUpdateNode, CfgNode { ObjectCreationNode() { node.(CallNode) = any(ClassCall c).getNode() } @@ -122,26 +122,39 @@ module EssaFlow { // Definition // `x = f(42)` // nodeFrom is `f(42)`, cfg node - // nodeTo is `x`, essa var - nodeFrom.(CfgNode).getNode() = - nodeTo.(EssaNode).getVar().getDefinition().(AssignmentDefinition).getValue() + // nodeTo `x`, cfg node + exists(EssaNodeDefinition ed, DefinitionNode def | def = ed.getDefiningNode() | + nodeFrom.asCfgNode() = def.getValue() and + nodeTo.asCfgNode() = def + ) or - // With definition - // `with f(42) as x:` + // Definition + // `x = f(42)` // nodeFrom is `f(42)`, cfg node - // nodeTo is `x`, essa var - exists(With with, ControlFlowNode contextManager, ControlFlowNode var | - nodeFrom.(CfgNode).getNode() = contextManager and - nodeTo.(EssaNode).getVar().getDefinition().(WithDefinition).getDefiningNode() = var and - // see `with_flow` in `python/ql/src/semmle/python/dataflow/Implementation.qll` - with.getContextExpr() = contextManager.getNode() and - with.getOptionalVars() = var.getNode() and - contextManager.strictlyDominates(var) + // nodeTo is + // - `x`, essa var, if `x` is global + // - first use of `x`, cfg node, if `x` is not global + // + // case where `x` is not global + exists(EssaNodeDefinition ed | + nodeFrom.asCfgNode() = ed.getDefiningNode() and + defToFirstUse(ed.getVariable(), nodeTo.asCfgNode()) and + not ed.getVariable() instanceof GlobalSsaVariable + ) + or + // case where `x` is global + exists(EssaNodeDefinition ed | + nodeFrom.asCfgNode() = ed.getDefiningNode() and + nodeTo.asVar() = ed.getVariable().(GlobalSsaVariable) ) or + // Parameter definition + // `f(x)` + // nodeFrom is `x`, cfg node + // nodeTo is first use of `x`, cfg node exists(ParameterDefinition pd | nodeFrom.asCfgNode() = pd.getDefiningNode() and - nodeTo.asVar() = pd.getVariable() + defToFirstUse(pd.getVariable(), nodeTo.asCfgNode()) ) or // First use after definition @@ -149,6 +162,8 @@ module EssaFlow { // `x = f(y)` // nodeFrom is `y` on first line, essa var // nodeTo is `y` on second line, cfg node + // + // This case is now only used for captured variables. defToFirstUse(nodeFrom.asVar(), nodeTo.asCfgNode()) or // Next use after use diff --git a/python/ql/test/experimental/dataflow/basic/global.expected b/python/ql/test/experimental/dataflow/basic/global.expected index 8894bcc190a0..d36448aa8c98 100644 --- a/python/ql/test/experimental/dataflow/basic/global.expected +++ b/python/ql/test/experimental/dataflow/basic/global.expected @@ -1,69 +1,102 @@ +| test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | | test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:1:5:1:17 | GSSA Variable obfuscated_id | | test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | +| test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | test.py:1:5:1:17 | GSSA Variable obfuscated_id | +| test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | | test.py:1:5:1:17 | GSSA Variable obfuscated_id | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:1:19:1:19 | SSA variable x | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:3:2:3 | SSA variable y | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:3:2:3 | ControlFlowNode for y | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:7:2:7 | ControlFlowNode for x | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:3:3:3 | SSA variable z | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:7:1:7:1 | ControlFlowNode for b | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:7:1:7:1 | GSSA Variable b | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | -| test.py:1:19:1:19 | SSA variable x | test.py:2:3:2:3 | SSA variable y | +| test.py:1:19:1:19 | SSA variable x | test.py:2:3:2:3 | ControlFlowNode for y | | test.py:1:19:1:19 | SSA variable x | test.py:2:7:2:7 | ControlFlowNode for x | -| test.py:1:19:1:19 | SSA variable x | test.py:3:3:3:3 | SSA variable z | +| test.py:1:19:1:19 | SSA variable x | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:1:19:1:19 | SSA variable x | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:1:19:1:19 | SSA variable x | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:1:19:1:19 | SSA variable x | test.py:7:1:7:1 | ControlFlowNode for b | | test.py:1:19:1:19 | SSA variable x | test.py:7:1:7:1 | GSSA Variable b | | test.py:1:19:1:19 | SSA variable x | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | -| test.py:2:3:2:3 | SSA variable y | test.py:3:3:3:3 | SSA variable z | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:3:7:3:7 | ControlFlowNode for y | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:7:1:7:1 | ControlFlowNode for b | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:7:1:7:1 | GSSA Variable b | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | +| test.py:2:3:2:3 | SSA variable y | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:2:3:2:3 | SSA variable y | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:2:3:2:3 | SSA variable y | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:2:3:2:3 | SSA variable y | test.py:7:1:7:1 | ControlFlowNode for b | | test.py:2:3:2:3 | SSA variable y | test.py:7:1:7:1 | GSSA Variable b | | test.py:2:3:2:3 | SSA variable y | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | -| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | SSA variable y | -| test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:3:3:3 | SSA variable z | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | ControlFlowNode for y | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:2:7:2:7 | ControlFlowNode for x | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:7:1:7:1 | ControlFlowNode for b | | test.py:2:7:2:7 | ControlFlowNode for x | test.py:7:1:7:1 | GSSA Variable b | | test.py:2:7:2:7 | ControlFlowNode for x | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | +| test.py:3:3:3:3 | ControlFlowNode for z | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:3:3:3:3 | ControlFlowNode for z | test.py:7:1:7:1 | ControlFlowNode for b | +| test.py:3:3:3:3 | ControlFlowNode for z | test.py:7:1:7:1 | GSSA Variable b | +| test.py:3:3:3:3 | ControlFlowNode for z | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | | test.py:3:3:3:3 | SSA variable z | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:3:3:3:3 | SSA variable z | test.py:7:1:7:1 | ControlFlowNode for b | | test.py:3:3:3:3 | SSA variable z | test.py:7:1:7:1 | GSSA Variable b | | test.py:3:3:3:3 | SSA variable z | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | -| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | SSA variable z | +| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:3:7:3:7 | ControlFlowNode for y | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:3:7:3:7 | ControlFlowNode for y | test.py:7:1:7:1 | ControlFlowNode for b | | test.py:3:7:3:7 | ControlFlowNode for y | test.py:7:1:7:1 | GSSA Variable b | | test.py:3:7:3:7 | ControlFlowNode for y | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | +| test.py:4:10:4:10 | ControlFlowNode for z | test.py:7:1:7:1 | ControlFlowNode for b | | test.py:4:10:4:10 | ControlFlowNode for z | test.py:7:1:7:1 | GSSA Variable b | | test.py:4:10:4:10 | ControlFlowNode for z | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:1:19:1:19 | ControlFlowNode for x | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:2:3:2:3 | ControlFlowNode for y | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:2:7:2:7 | ControlFlowNode for x | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:3:7:3:7 | ControlFlowNode for y | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:6:1:6:1 | GSSA Variable a | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:7:1:7:1 | ControlFlowNode for b | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:7:1:7:1 | GSSA Variable b | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:7:19:7:19 | ControlFlowNode for a | | test.py:6:1:6:1 | GSSA Variable a | test.py:1:19:1:19 | ControlFlowNode for x | -| test.py:6:1:6:1 | GSSA Variable a | test.py:1:19:1:19 | SSA variable x | -| test.py:6:1:6:1 | GSSA Variable a | test.py:2:3:2:3 | SSA variable y | +| test.py:6:1:6:1 | GSSA Variable a | test.py:2:3:2:3 | ControlFlowNode for y | | test.py:6:1:6:1 | GSSA Variable a | test.py:2:7:2:7 | ControlFlowNode for x | -| test.py:6:1:6:1 | GSSA Variable a | test.py:3:3:3:3 | SSA variable z | +| test.py:6:1:6:1 | GSSA Variable a | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:6:1:6:1 | GSSA Variable a | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:6:1:6:1 | GSSA Variable a | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:6:1:6:1 | GSSA Variable a | test.py:7:1:7:1 | ControlFlowNode for b | | test.py:6:1:6:1 | GSSA Variable a | test.py:7:1:7:1 | GSSA Variable b | | test.py:6:1:6:1 | GSSA Variable a | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | | test.py:6:1:6:1 | GSSA Variable a | test.py:7:19:7:19 | ControlFlowNode for a | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:1:19:1:19 | ControlFlowNode for x | -| test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:1:19:1:19 | SSA variable x | -| test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:2:3:2:3 | SSA variable y | +| test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:2:3:2:3 | ControlFlowNode for y | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:2:7:2:7 | ControlFlowNode for x | -| test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:3:3:3:3 | SSA variable z | +| test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:6:1:6:1 | ControlFlowNode for a | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:6:1:6:1 | GSSA Variable a | +| test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:7:1:7:1 | ControlFlowNode for b | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:7:1:7:1 | GSSA Variable b | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:7:19:7:19 | ControlFlowNode for a | +| test.py:7:1:7:1 | ControlFlowNode for b | test.py:7:1:7:1 | GSSA Variable b | +| test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | test.py:7:1:7:1 | ControlFlowNode for b | | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | test.py:7:1:7:1 | GSSA Variable b | | test.py:7:19:7:19 | ControlFlowNode for a | test.py:1:19:1:19 | ControlFlowNode for x | -| test.py:7:19:7:19 | ControlFlowNode for a | test.py:1:19:1:19 | SSA variable x | -| test.py:7:19:7:19 | ControlFlowNode for a | test.py:2:3:2:3 | SSA variable y | +| test.py:7:19:7:19 | ControlFlowNode for a | test.py:2:3:2:3 | ControlFlowNode for y | | test.py:7:19:7:19 | ControlFlowNode for a | test.py:2:7:2:7 | ControlFlowNode for x | -| test.py:7:19:7:19 | ControlFlowNode for a | test.py:3:3:3:3 | SSA variable z | +| test.py:7:19:7:19 | ControlFlowNode for a | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:7:19:7:19 | ControlFlowNode for a | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:7:19:7:19 | ControlFlowNode for a | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:7:19:7:19 | ControlFlowNode for a | test.py:7:1:7:1 | ControlFlowNode for b | | test.py:7:19:7:19 | ControlFlowNode for a | test.py:7:1:7:1 | GSSA Variable b | | test.py:7:19:7:19 | ControlFlowNode for a | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | diff --git a/python/ql/test/experimental/dataflow/basic/globalStep.expected b/python/ql/test/experimental/dataflow/basic/globalStep.expected index 4e9d4a8148b6..698b3a399b48 100644 --- a/python/ql/test/experimental/dataflow/basic/globalStep.expected +++ b/python/ql/test/experimental/dataflow/basic/globalStep.expected @@ -1,25 +1,27 @@ +| test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | +| test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | | test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:1:5:1:17 | GSSA Variable obfuscated_id | | test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:1:5:1:17 | GSSA Variable obfuscated_id | | test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | | test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | +| test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | test.py:1:5:1:17 | GSSA Variable obfuscated_id | +| test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | test.py:1:5:1:17 | GSSA Variable obfuscated_id | +| test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | +| test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | | test.py:1:5:1:17 | GSSA Variable obfuscated_id | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | | test.py:1:5:1:17 | GSSA Variable obfuscated_id | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:1:19:1:19 | SSA variable x | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:1:19:1:19 | SSA variable x | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:1:19:1:19 | SSA variable x | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:1:19:1:19 | SSA variable x | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:3:2:3 | SSA variable y | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:3:2:3 | SSA variable y | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:3:2:3 | SSA variable y | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:3:2:3 | SSA variable y | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:3:2:3 | ControlFlowNode for y | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:3:2:3 | ControlFlowNode for y | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:3:2:3 | ControlFlowNode for y | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:3:2:3 | ControlFlowNode for y | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:7:2:7 | ControlFlowNode for x | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:7:2:7 | ControlFlowNode for x | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:7:2:7 | ControlFlowNode for x | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:7:2:7 | ControlFlowNode for x | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:3:3:3 | SSA variable z | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:3:3:3 | SSA variable z | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:3:3:3 | SSA variable z | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:3:3:3 | SSA variable z | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:7:3:7 | ControlFlowNode for y | @@ -28,46 +30,42 @@ | test.py:1:19:1:19 | ControlFlowNode for x | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:4:10:4:10 | ControlFlowNode for z | -| test.py:1:19:1:19 | SSA variable x | test.py:2:3:2:3 | SSA variable y | -| test.py:1:19:1:19 | SSA variable x | test.py:2:3:2:3 | SSA variable y | -| test.py:1:19:1:19 | SSA variable x | test.py:2:3:2:3 | SSA variable y | -| test.py:1:19:1:19 | SSA variable x | test.py:2:3:2:3 | SSA variable y | +| test.py:1:19:1:19 | SSA variable x | test.py:2:3:2:3 | ControlFlowNode for y | +| test.py:1:19:1:19 | SSA variable x | test.py:2:3:2:3 | ControlFlowNode for y | | test.py:1:19:1:19 | SSA variable x | test.py:2:7:2:7 | ControlFlowNode for x | | test.py:1:19:1:19 | SSA variable x | test.py:2:7:2:7 | ControlFlowNode for x | -| test.py:1:19:1:19 | SSA variable x | test.py:2:7:2:7 | ControlFlowNode for x | -| test.py:1:19:1:19 | SSA variable x | test.py:2:7:2:7 | ControlFlowNode for x | -| test.py:1:19:1:19 | SSA variable x | test.py:3:3:3:3 | SSA variable z | -| test.py:1:19:1:19 | SSA variable x | test.py:3:3:3:3 | SSA variable z | -| test.py:1:19:1:19 | SSA variable x | test.py:3:3:3:3 | SSA variable z | -| test.py:1:19:1:19 | SSA variable x | test.py:3:3:3:3 | SSA variable z | -| test.py:1:19:1:19 | SSA variable x | test.py:3:7:3:7 | ControlFlowNode for y | +| test.py:1:19:1:19 | SSA variable x | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:1:19:1:19 | SSA variable x | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:1:19:1:19 | SSA variable x | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:1:19:1:19 | SSA variable x | test.py:3:7:3:7 | ControlFlowNode for y | -| test.py:1:19:1:19 | SSA variable x | test.py:3:7:3:7 | ControlFlowNode for y | -| test.py:1:19:1:19 | SSA variable x | test.py:4:10:4:10 | ControlFlowNode for z | -| test.py:1:19:1:19 | SSA variable x | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:1:19:1:19 | SSA variable x | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:1:19:1:19 | SSA variable x | test.py:4:10:4:10 | ControlFlowNode for z | -| test.py:2:3:2:3 | SSA variable y | test.py:3:3:3:3 | SSA variable z | -| test.py:2:3:2:3 | SSA variable y | test.py:3:3:3:3 | SSA variable z | -| test.py:2:3:2:3 | SSA variable y | test.py:3:3:3:3 | SSA variable z | -| test.py:2:3:2:3 | SSA variable y | test.py:3:3:3:3 | SSA variable z | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:3:7:3:7 | ControlFlowNode for y | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:3:7:3:7 | ControlFlowNode for y | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:3:7:3:7 | ControlFlowNode for y | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:3:7:3:7 | ControlFlowNode for y | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:2:3:2:3 | SSA variable y | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:2:3:2:3 | SSA variable y | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:2:3:2:3 | SSA variable y | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:2:3:2:3 | SSA variable y | test.py:3:7:3:7 | ControlFlowNode for y | -| test.py:2:3:2:3 | SSA variable y | test.py:3:7:3:7 | ControlFlowNode for y | -| test.py:2:3:2:3 | SSA variable y | test.py:3:7:3:7 | ControlFlowNode for y | -| test.py:2:3:2:3 | SSA variable y | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:2:3:2:3 | SSA variable y | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:2:3:2:3 | SSA variable y | test.py:4:10:4:10 | ControlFlowNode for z | -| test.py:2:3:2:3 | SSA variable y | test.py:4:10:4:10 | ControlFlowNode for z | -| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | SSA variable y | -| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | SSA variable y | -| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | SSA variable y | -| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | SSA variable y | -| test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:3:3:3 | SSA variable z | -| test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:3:3:3 | SSA variable z | -| test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:3:3:3 | SSA variable z | -| test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:3:3:3 | SSA variable z | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | ControlFlowNode for y | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | ControlFlowNode for y | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | ControlFlowNode for y | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | ControlFlowNode for y | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:7:3:7 | ControlFlowNode for y | @@ -76,26 +74,38 @@ | test.py:2:7:2:7 | ControlFlowNode for x | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:2:7:2:7 | ControlFlowNode for x | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:2:7:2:7 | ControlFlowNode for x | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:3:3:3:3 | ControlFlowNode for z | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:3:3:3:3 | ControlFlowNode for z | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:3:3:3:3 | ControlFlowNode for z | test.py:4:10:4:10 | ControlFlowNode for z | +| test.py:3:3:3:3 | ControlFlowNode for z | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:3:3:3:3 | SSA variable z | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:3:3:3:3 | SSA variable z | test.py:4:10:4:10 | ControlFlowNode for z | -| test.py:3:3:3:3 | SSA variable z | test.py:4:10:4:10 | ControlFlowNode for z | -| test.py:3:3:3:3 | SSA variable z | test.py:4:10:4:10 | ControlFlowNode for z | -| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | SSA variable z | -| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | SSA variable z | -| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | SSA variable z | -| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | SSA variable z | +| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:3:7:3:7 | ControlFlowNode for y | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:3:7:3:7 | ControlFlowNode for y | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:3:7:3:7 | ControlFlowNode for y | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:3:7:3:7 | ControlFlowNode for y | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:4:10:4:10 | ControlFlowNode for z | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | | test.py:4:10:4:10 | ControlFlowNode for z | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:6:1:6:1 | GSSA Variable a | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:6:1:6:1 | GSSA Variable a | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:7:19:7:19 | ControlFlowNode for a | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:7:19:7:19 | ControlFlowNode for a | | test.py:6:1:6:1 | GSSA Variable a | test.py:7:19:7:19 | ControlFlowNode for a | | test.py:6:1:6:1 | GSSA Variable a | test.py:7:19:7:19 | ControlFlowNode for a | +| test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:6:1:6:1 | ControlFlowNode for a | +| test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:6:1:6:1 | ControlFlowNode for a | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:6:1:6:1 | GSSA Variable a | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:6:1:6:1 | GSSA Variable a | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:7:19:7:19 | ControlFlowNode for a | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:7:19:7:19 | ControlFlowNode for a | +| test.py:7:1:7:1 | ControlFlowNode for b | test.py:7:1:7:1 | GSSA Variable b | +| test.py:7:1:7:1 | ControlFlowNode for b | test.py:7:1:7:1 | GSSA Variable b | +| test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | test.py:7:1:7:1 | ControlFlowNode for b | +| test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | test.py:7:1:7:1 | ControlFlowNode for b | | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | test.py:7:1:7:1 | GSSA Variable b | | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | test.py:7:1:7:1 | GSSA Variable b | | test.py:7:19:7:19 | ControlFlowNode for a | test.py:1:19:1:19 | ControlFlowNode for x | diff --git a/python/ql/test/experimental/dataflow/basic/local.expected b/python/ql/test/experimental/dataflow/basic/local.expected index c02b341eeaef..1dfdea977dfb 100644 --- a/python/ql/test/experimental/dataflow/basic/local.expected +++ b/python/ql/test/experimental/dataflow/basic/local.expected @@ -3,50 +3,61 @@ | test.py:0:0:0:0 | GSSA Variable b | test.py:0:0:0:0 | GSSA Variable b | | test.py:0:0:0:0 | SSA variable $ | test.py:0:0:0:0 | SSA variable $ | | test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | +| test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | | test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:1:5:1:17 | GSSA Variable obfuscated_id | | test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | | test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | +| test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | test.py:1:5:1:17 | GSSA Variable obfuscated_id | +| test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | | test.py:1:5:1:17 | GSSA Variable obfuscated_id | test.py:1:5:1:17 | GSSA Variable obfuscated_id | | test.py:1:5:1:17 | GSSA Variable obfuscated_id | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:1:19:1:19 | ControlFlowNode for x | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:1:19:1:19 | SSA variable x | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:3:2:3 | SSA variable y | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:3:2:3 | ControlFlowNode for y | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:7:2:7 | ControlFlowNode for x | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:3:3:3 | SSA variable z | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:1:19:1:19 | ControlFlowNode for x | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:1:19:1:19 | SSA variable x | test.py:1:19:1:19 | SSA variable x | -| test.py:1:19:1:19 | SSA variable x | test.py:2:3:2:3 | SSA variable y | +| test.py:1:19:1:19 | SSA variable x | test.py:2:3:2:3 | ControlFlowNode for y | | test.py:1:19:1:19 | SSA variable x | test.py:2:7:2:7 | ControlFlowNode for x | -| test.py:1:19:1:19 | SSA variable x | test.py:3:3:3:3 | SSA variable z | +| test.py:1:19:1:19 | SSA variable x | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:1:19:1:19 | SSA variable x | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:1:19:1:19 | SSA variable x | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:2:3:2:3 | ControlFlowNode for y | test.py:2:3:2:3 | ControlFlowNode for y | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:3:7:3:7 | ControlFlowNode for y | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:2:3:2:3 | SSA variable y | test.py:2:3:2:3 | SSA variable y | -| test.py:2:3:2:3 | SSA variable y | test.py:3:3:3:3 | SSA variable z | +| test.py:2:3:2:3 | SSA variable y | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:2:3:2:3 | SSA variable y | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:2:3:2:3 | SSA variable y | test.py:4:10:4:10 | ControlFlowNode for z | -| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | SSA variable y | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | ControlFlowNode for y | | test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:7:2:7 | ControlFlowNode for x | -| test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:3:3:3 | SSA variable z | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:2:7:2:7 | ControlFlowNode for x | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:2:7:2:7 | ControlFlowNode for x | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:3:3:3:3 | ControlFlowNode for z | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:3:3:3:3 | ControlFlowNode for z | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:3:3:3:3 | SSA variable z | test.py:3:3:3:3 | SSA variable z | | test.py:3:3:3:3 | SSA variable z | test.py:4:10:4:10 | ControlFlowNode for z | -| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | SSA variable z | +| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | ControlFlowNode for z | | test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:3:7:3:7 | ControlFlowNode for y | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:4:10:4:10 | ControlFlowNode for z | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:6:1:6:1 | ControlFlowNode for a | test.py:6:1:6:1 | ControlFlowNode for a | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:6:1:6:1 | GSSA Variable a | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:7:19:7:19 | ControlFlowNode for a | | test.py:6:1:6:1 | GSSA Variable a | test.py:6:1:6:1 | GSSA Variable a | | test.py:6:1:6:1 | GSSA Variable a | test.py:7:19:7:19 | ControlFlowNode for a | +| test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:6:1:6:1 | ControlFlowNode for a | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:6:1:6:1 | GSSA Variable a | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | | test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:7:19:7:19 | ControlFlowNode for a | | test.py:7:1:7:1 | ControlFlowNode for b | test.py:7:1:7:1 | ControlFlowNode for b | +| test.py:7:1:7:1 | ControlFlowNode for b | test.py:7:1:7:1 | GSSA Variable b | | test.py:7:1:7:1 | GSSA Variable b | test.py:7:1:7:1 | GSSA Variable b | | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | +| test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | test.py:7:1:7:1 | ControlFlowNode for b | | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | test.py:7:1:7:1 | GSSA Variable b | | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | | test.py:7:5:7:20 | GSSA Variable a | test.py:7:5:7:20 | GSSA Variable a | diff --git a/python/ql/test/experimental/dataflow/basic/localStep.expected b/python/ql/test/experimental/dataflow/basic/localStep.expected index e147bb9f4fc2..a02a571e8c9e 100644 --- a/python/ql/test/experimental/dataflow/basic/localStep.expected +++ b/python/ql/test/experimental/dataflow/basic/localStep.expected @@ -1,11 +1,16 @@ -| test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:1:5:1:17 | GSSA Variable obfuscated_id | +| test.py:1:1:1:21 | ControlFlowNode for FunctionExpr | test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | +| test.py:1:5:1:17 | ControlFlowNode for obfuscated_id | test.py:1:5:1:17 | GSSA Variable obfuscated_id | | test.py:1:5:1:17 | GSSA Variable obfuscated_id | test.py:7:5:7:17 | ControlFlowNode for obfuscated_id | -| test.py:1:19:1:19 | ControlFlowNode for x | test.py:1:19:1:19 | SSA variable x | +| test.py:1:19:1:19 | ControlFlowNode for x | test.py:2:7:2:7 | ControlFlowNode for x | | test.py:1:19:1:19 | SSA variable x | test.py:2:7:2:7 | ControlFlowNode for x | +| test.py:2:3:2:3 | ControlFlowNode for y | test.py:3:7:3:7 | ControlFlowNode for y | | test.py:2:3:2:3 | SSA variable y | test.py:3:7:3:7 | ControlFlowNode for y | -| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | SSA variable y | +| test.py:2:7:2:7 | ControlFlowNode for x | test.py:2:3:2:3 | ControlFlowNode for y | +| test.py:3:3:3:3 | ControlFlowNode for z | test.py:4:10:4:10 | ControlFlowNode for z | | test.py:3:3:3:3 | SSA variable z | test.py:4:10:4:10 | ControlFlowNode for z | -| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | SSA variable z | +| test.py:3:7:3:7 | ControlFlowNode for y | test.py:3:3:3:3 | ControlFlowNode for z | +| test.py:6:1:6:1 | ControlFlowNode for a | test.py:6:1:6:1 | GSSA Variable a | | test.py:6:1:6:1 | GSSA Variable a | test.py:7:19:7:19 | ControlFlowNode for a | -| test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:6:1:6:1 | GSSA Variable a | -| test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | test.py:7:1:7:1 | GSSA Variable b | +| test.py:6:5:6:6 | ControlFlowNode for IntegerLiteral | test.py:6:1:6:1 | ControlFlowNode for a | +| test.py:7:1:7:1 | ControlFlowNode for b | test.py:7:1:7:1 | GSSA Variable b | +| test.py:7:5:7:20 | ControlFlowNode for obfuscated_id() | test.py:7:1:7:1 | ControlFlowNode for b | diff --git a/python/ql/test/experimental/dataflow/coverage/dataflow.expected b/python/ql/test/experimental/dataflow/coverage/dataflow.expected index dc0859554086..62a4f423ec93 100644 --- a/python/ql/test/experimental/dataflow/coverage/dataflow.expected +++ b/python/ql/test/experimental/dataflow/coverage/dataflow.expected @@ -1,5 +1,11 @@ edges | datamodel.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module datamodel | datamodel.py:152:14:152:19 | ControlFlowNode for SOURCE | +| datamodel.py:13:1:13:6 | ControlFlowNode for SOURCE | datamodel.py:13:1:13:6 | GSSA Variable SOURCE | +| datamodel.py:13:1:13:6 | ControlFlowNode for SOURCE | datamodel.py:38:8:38:13 | ControlFlowNode for SOURCE | +| datamodel.py:13:1:13:6 | ControlFlowNode for SOURCE | datamodel.py:71:15:71:20 | ControlFlowNode for SOURCE | +| datamodel.py:13:1:13:6 | ControlFlowNode for SOURCE | datamodel.py:72:18:72:23 | ControlFlowNode for SOURCE | +| datamodel.py:13:1:13:6 | ControlFlowNode for SOURCE | datamodel.py:80:20:80:25 | ControlFlowNode for SOURCE | +| datamodel.py:13:1:13:6 | ControlFlowNode for SOURCE | datamodel.py:81:20:81:25 | ControlFlowNode for SOURCE | | datamodel.py:13:1:13:6 | GSSA Variable SOURCE | datamodel.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module datamodel | | datamodel.py:13:10:13:17 | ControlFlowNode for Str | datamodel.py:13:1:13:6 | GSSA Variable SOURCE | | datamodel.py:13:10:13:17 | ControlFlowNode for Str | datamodel.py:38:8:38:13 | ControlFlowNode for SOURCE | @@ -61,6 +67,7 @@ edges | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module test | test.py:492:33:492:38 | ControlFlowNode for SOURCE | | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module test | test.py:497:39:497:44 | ControlFlowNode for SOURCE | | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module test | test.py:509:9:509:14 | ControlFlowNode for SOURCE | +| test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:20:1:20:6 | GSSA Variable SOURCE | | test.py:20:1:20:6 | GSSA Variable SOURCE | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module test | | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:20:1:20:6 | GSSA Variable SOURCE | | test.py:42:10:42:26 | ControlFlowNode for Tuple [Tuple element at index 1] | test.py:43:9:43:9 | ControlFlowNode for x [Tuple element at index 1] | @@ -181,6 +188,7 @@ edges | test.py:509:9:509:14 | ControlFlowNode for SOURCE | test.py:516:10:516:10 | ControlFlowNode for b | nodes | datamodel.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module datamodel | semmle.label | ModuleVariableNode for Global Variable SOURCE in Module datamodel | +| datamodel.py:13:1:13:6 | ControlFlowNode for SOURCE | semmle.label | ControlFlowNode for SOURCE | | datamodel.py:13:1:13:6 | GSSA Variable SOURCE | semmle.label | GSSA Variable SOURCE | | datamodel.py:13:10:13:17 | ControlFlowNode for Str | semmle.label | ControlFlowNode for Str | | datamodel.py:38:6:38:17 | ControlFlowNode for f() | semmle.label | ControlFlowNode for f() | @@ -200,6 +208,7 @@ nodes | datamodel.py:159:6:159:15 | ControlFlowNode for customized [Attribute b] | semmle.label | ControlFlowNode for customized [Attribute b] | | datamodel.py:159:6:159:17 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module test | semmle.label | ModuleVariableNode for Global Variable SOURCE in Module test | +| test.py:20:1:20:6 | ControlFlowNode for SOURCE | semmle.label | ControlFlowNode for SOURCE | | test.py:20:1:20:6 | GSSA Variable SOURCE | semmle.label | GSSA Variable SOURCE | | test.py:20:10:20:17 | ControlFlowNode for Str | semmle.label | ControlFlowNode for Str | | test.py:42:10:42:26 | ControlFlowNode for Tuple [Tuple element at index 1] | semmle.label | ControlFlowNode for Tuple [Tuple element at index 1] | @@ -356,21 +365,26 @@ nodes | test.py:511:10:511:10 | ControlFlowNode for a | semmle.label | ControlFlowNode for a | | test.py:516:10:516:10 | ControlFlowNode for b | semmle.label | ControlFlowNode for b | #select +| datamodel.py:38:6:38:17 | ControlFlowNode for f() | datamodel.py:13:1:13:6 | ControlFlowNode for SOURCE | datamodel.py:38:6:38:17 | ControlFlowNode for f() | Flow found | | datamodel.py:38:6:38:17 | ControlFlowNode for f() | datamodel.py:13:10:13:17 | ControlFlowNode for Str | datamodel.py:38:6:38:17 | ControlFlowNode for f() | Flow found | | datamodel.py:38:6:38:17 | ControlFlowNode for f() | datamodel.py:38:8:38:13 | ControlFlowNode for SOURCE | datamodel.py:38:6:38:17 | ControlFlowNode for f() | Flow found | +| datamodel.py:71:6:71:24 | ControlFlowNode for Attribute() | datamodel.py:13:1:13:6 | ControlFlowNode for SOURCE | datamodel.py:71:6:71:24 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:71:6:71:24 | ControlFlowNode for Attribute() | datamodel.py:13:10:13:17 | ControlFlowNode for Str | datamodel.py:71:6:71:24 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:71:6:71:24 | ControlFlowNode for Attribute() | datamodel.py:38:8:38:13 | ControlFlowNode for SOURCE | datamodel.py:71:6:71:24 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:71:6:71:24 | ControlFlowNode for Attribute() | datamodel.py:71:15:71:20 | ControlFlowNode for SOURCE | datamodel.py:71:6:71:24 | ControlFlowNode for Attribute() | Flow found | +| datamodel.py:72:6:72:27 | ControlFlowNode for Attribute() | datamodel.py:13:1:13:6 | ControlFlowNode for SOURCE | datamodel.py:72:6:72:27 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:72:6:72:27 | ControlFlowNode for Attribute() | datamodel.py:13:10:13:17 | ControlFlowNode for Str | datamodel.py:72:6:72:27 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:72:6:72:27 | ControlFlowNode for Attribute() | datamodel.py:38:8:38:13 | ControlFlowNode for SOURCE | datamodel.py:72:6:72:27 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:72:6:72:27 | ControlFlowNode for Attribute() | datamodel.py:71:15:71:20 | ControlFlowNode for SOURCE | datamodel.py:72:6:72:27 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:72:6:72:27 | ControlFlowNode for Attribute() | datamodel.py:72:18:72:23 | ControlFlowNode for SOURCE | datamodel.py:72:6:72:27 | ControlFlowNode for Attribute() | Flow found | +| datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | datamodel.py:13:1:13:6 | ControlFlowNode for SOURCE | datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | datamodel.py:13:10:13:17 | ControlFlowNode for Str | datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | datamodel.py:38:8:38:13 | ControlFlowNode for SOURCE | datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | datamodel.py:71:15:71:20 | ControlFlowNode for SOURCE | datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | datamodel.py:72:18:72:23 | ControlFlowNode for SOURCE | datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | datamodel.py:73:18:73:23 | ControlFlowNode for SOURCE | datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | datamodel.py:80:20:80:25 | ControlFlowNode for SOURCE | datamodel.py:80:6:80:26 | ControlFlowNode for Attribute() | Flow found | +| datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | datamodel.py:13:1:13:6 | ControlFlowNode for SOURCE | datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | datamodel.py:13:10:13:17 | ControlFlowNode for Str | datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | datamodel.py:38:8:38:13 | ControlFlowNode for SOURCE | datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | datamodel.py:71:15:71:20 | ControlFlowNode for SOURCE | datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | Flow found | @@ -378,77 +392,112 @@ nodes | datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | datamodel.py:73:18:73:23 | ControlFlowNode for SOURCE | datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | datamodel.py:80:20:80:25 | ControlFlowNode for SOURCE | datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | Flow found | | datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | datamodel.py:81:20:81:25 | ControlFlowNode for SOURCE | datamodel.py:81:6:81:26 | ControlFlowNode for Attribute() | Flow found | +| datamodel.py:159:6:159:17 | ControlFlowNode for Attribute | datamodel.py:13:1:13:6 | ControlFlowNode for SOURCE | datamodel.py:159:6:159:17 | ControlFlowNode for Attribute | Flow found | | datamodel.py:159:6:159:17 | ControlFlowNode for Attribute | datamodel.py:13:10:13:17 | ControlFlowNode for Str | datamodel.py:159:6:159:17 | ControlFlowNode for Attribute | Flow found | | datamodel.py:159:6:159:17 | ControlFlowNode for Attribute | datamodel.py:152:14:152:19 | ControlFlowNode for SOURCE | datamodel.py:159:6:159:17 | ControlFlowNode for Attribute | Flow found | +| test.py:44:10:44:10 | ControlFlowNode for y | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:44:10:44:10 | ControlFlowNode for y | Flow found | | test.py:44:10:44:10 | ControlFlowNode for y | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:44:10:44:10 | ControlFlowNode for y | Flow found | | test.py:44:10:44:10 | ControlFlowNode for y | test.py:42:21:42:26 | ControlFlowNode for SOURCE | test.py:44:10:44:10 | ControlFlowNode for y | Flow found | +| test.py:56:10:56:10 | ControlFlowNode for x | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:56:10:56:10 | ControlFlowNode for x | Flow found | | test.py:56:10:56:10 | ControlFlowNode for x | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:56:10:56:10 | ControlFlowNode for x | Flow found | | test.py:56:10:56:10 | ControlFlowNode for x | test.py:55:9:55:14 | ControlFlowNode for SOURCE | test.py:56:10:56:10 | ControlFlowNode for x | Flow found | | test.py:62:10:62:10 | ControlFlowNode for x | test.py:61:9:61:16 | ControlFlowNode for Str | test.py:62:10:62:10 | ControlFlowNode for x | Flow found | | test.py:67:10:67:10 | ControlFlowNode for x | test.py:66:9:66:17 | ControlFlowNode for Str | test.py:67:10:67:10 | ControlFlowNode for x | Flow found | | test.py:72:10:72:10 | ControlFlowNode for x | test.py:71:9:71:10 | ControlFlowNode for IntegerLiteral | test.py:72:10:72:10 | ControlFlowNode for x | Flow found | | test.py:77:10:77:10 | ControlFlowNode for x | test.py:76:9:76:12 | ControlFlowNode for FloatLiteral | test.py:77:10:77:10 | ControlFlowNode for x | Flow found | +| test.py:88:10:88:10 | ControlFlowNode for x | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:88:10:88:10 | ControlFlowNode for x | Flow found | | test.py:88:10:88:10 | ControlFlowNode for x | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:88:10:88:10 | ControlFlowNode for x | Flow found | | test.py:88:10:88:10 | ControlFlowNode for x | test.py:87:10:87:15 | ControlFlowNode for SOURCE | test.py:88:10:88:10 | ControlFlowNode for x | Flow found | +| test.py:94:10:94:13 | ControlFlowNode for Subscript | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:94:10:94:13 | ControlFlowNode for Subscript | Flow found | | test.py:94:10:94:13 | ControlFlowNode for Subscript | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:94:10:94:13 | ControlFlowNode for Subscript | Flow found | | test.py:94:10:94:13 | ControlFlowNode for Subscript | test.py:93:10:93:15 | ControlFlowNode for SOURCE | test.py:94:10:94:13 | ControlFlowNode for Subscript | Flow found | +| test.py:104:10:104:13 | ControlFlowNode for Subscript | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:104:10:104:13 | ControlFlowNode for Subscript | Flow found | | test.py:104:10:104:13 | ControlFlowNode for Subscript | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:104:10:104:13 | ControlFlowNode for Subscript | Flow found | | test.py:104:10:104:13 | ControlFlowNode for Subscript | test.py:103:10:103:15 | ControlFlowNode for SOURCE | test.py:104:10:104:13 | ControlFlowNode for Subscript | Flow found | +| test.py:109:10:109:13 | ControlFlowNode for Subscript | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:109:10:109:13 | ControlFlowNode for Subscript | Flow found | | test.py:109:10:109:13 | ControlFlowNode for Subscript | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:109:10:109:13 | ControlFlowNode for Subscript | Flow found | | test.py:109:10:109:13 | ControlFlowNode for Subscript | test.py:108:22:108:27 | ControlFlowNode for SOURCE | test.py:109:10:109:13 | ControlFlowNode for Subscript | Flow found | +| test.py:115:10:115:13 | ControlFlowNode for Subscript | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:115:10:115:13 | ControlFlowNode for Subscript | Flow found | | test.py:115:10:115:13 | ControlFlowNode for Subscript | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:115:10:115:13 | ControlFlowNode for Subscript | Flow found | | test.py:115:10:115:13 | ControlFlowNode for Subscript | test.py:113:10:113:15 | ControlFlowNode for SOURCE | test.py:115:10:115:13 | ControlFlowNode for Subscript | Flow found | +| test.py:126:10:126:16 | ControlFlowNode for Attribute() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:126:10:126:16 | ControlFlowNode for Attribute() | Flow found | | test.py:126:10:126:16 | ControlFlowNode for Attribute() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:126:10:126:16 | ControlFlowNode for Attribute() | Flow found | | test.py:126:10:126:16 | ControlFlowNode for Attribute() | test.py:125:10:125:15 | ControlFlowNode for SOURCE | test.py:126:10:126:16 | ControlFlowNode for Attribute() | Flow found | +| test.py:131:10:131:16 | ControlFlowNode for Attribute() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:131:10:131:16 | ControlFlowNode for Attribute() | Flow found | | test.py:131:10:131:16 | ControlFlowNode for Attribute() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:131:10:131:16 | ControlFlowNode for Attribute() | Flow found | | test.py:131:10:131:16 | ControlFlowNode for Attribute() | test.py:130:10:130:15 | ControlFlowNode for SOURCE | test.py:131:10:131:16 | ControlFlowNode for Attribute() | Flow found | +| test.py:136:10:136:16 | ControlFlowNode for Attribute() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:136:10:136:16 | ControlFlowNode for Attribute() | Flow found | | test.py:136:10:136:16 | ControlFlowNode for Attribute() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:136:10:136:16 | ControlFlowNode for Attribute() | Flow found | | test.py:136:10:136:16 | ControlFlowNode for Attribute() | test.py:135:22:135:27 | ControlFlowNode for SOURCE | test.py:136:10:136:16 | ControlFlowNode for Attribute() | Flow found | +| test.py:142:10:142:16 | ControlFlowNode for Attribute() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:142:10:142:16 | ControlFlowNode for Attribute() | Flow found | | test.py:142:10:142:16 | ControlFlowNode for Attribute() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:142:10:142:16 | ControlFlowNode for Attribute() | Flow found | | test.py:142:10:142:16 | ControlFlowNode for Attribute() | test.py:140:10:140:15 | ControlFlowNode for SOURCE | test.py:142:10:142:16 | ControlFlowNode for Attribute() | Flow found | +| test.py:153:10:153:15 | ControlFlowNode for Subscript | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:153:10:153:15 | ControlFlowNode for Subscript | Flow found | | test.py:153:10:153:15 | ControlFlowNode for Subscript | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:153:10:153:15 | ControlFlowNode for Subscript | Flow found | | test.py:153:10:153:15 | ControlFlowNode for Subscript | test.py:152:15:152:20 | ControlFlowNode for SOURCE | test.py:153:10:153:15 | ControlFlowNode for Subscript | Flow found | +| test.py:158:10:158:19 | ControlFlowNode for Attribute() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:158:10:158:19 | ControlFlowNode for Attribute() | Flow found | | test.py:158:10:158:19 | ControlFlowNode for Attribute() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:158:10:158:19 | ControlFlowNode for Attribute() | Flow found | | test.py:158:10:158:19 | ControlFlowNode for Attribute() | test.py:157:15:157:20 | ControlFlowNode for SOURCE | test.py:158:10:158:19 | ControlFlowNode for Attribute() | Flow found | +| test.py:184:10:184:13 | ControlFlowNode for Subscript | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:184:10:184:13 | ControlFlowNode for Subscript | Flow found | | test.py:184:10:184:13 | ControlFlowNode for Subscript | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:184:10:184:13 | ControlFlowNode for Subscript | Flow found | | test.py:184:10:184:13 | ControlFlowNode for Subscript | test.py:183:23:183:28 | ControlFlowNode for SOURCE | test.py:184:10:184:13 | ControlFlowNode for Subscript | Flow found | +| test.py:189:10:189:13 | ControlFlowNode for Subscript | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:189:10:189:13 | ControlFlowNode for Subscript | Flow found | | test.py:189:10:189:13 | ControlFlowNode for Subscript | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:189:10:189:13 | ControlFlowNode for Subscript | Flow found | | test.py:189:10:189:13 | ControlFlowNode for Subscript | test.py:188:25:188:30 | ControlFlowNode for SOURCE | test.py:189:10:189:13 | ControlFlowNode for Subscript | Flow found | +| test.py:200:10:200:13 | ControlFlowNode for Subscript | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:200:10:200:13 | ControlFlowNode for Subscript | Flow found | | test.py:200:10:200:13 | ControlFlowNode for Subscript | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:200:10:200:13 | ControlFlowNode for Subscript | Flow found | | test.py:200:10:200:13 | ControlFlowNode for Subscript | test.py:199:34:199:39 | ControlFlowNode for SOURCE | test.py:200:10:200:13 | ControlFlowNode for Subscript | Flow found | +| test.py:336:10:336:21 | ControlFlowNode for Subscript | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:336:10:336:21 | ControlFlowNode for Subscript | Flow found | | test.py:336:10:336:21 | ControlFlowNode for Subscript | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:336:10:336:21 | ControlFlowNode for Subscript | Flow found | | test.py:336:10:336:21 | ControlFlowNode for Subscript | test.py:336:11:336:16 | ControlFlowNode for SOURCE | test.py:336:10:336:21 | ControlFlowNode for Subscript | Flow found | +| test.py:340:10:340:20 | ControlFlowNode for Subscript | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:340:10:340:20 | ControlFlowNode for Subscript | Flow found | | test.py:340:10:340:20 | ControlFlowNode for Subscript | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:340:10:340:20 | ControlFlowNode for Subscript | Flow found | | test.py:340:10:340:20 | ControlFlowNode for Subscript | test.py:340:11:340:16 | ControlFlowNode for SOURCE | test.py:340:10:340:20 | ControlFlowNode for Subscript | Flow found | +| test.py:344:10:344:27 | ControlFlowNode for Subscript | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:344:10:344:27 | ControlFlowNode for Subscript | Flow found | | test.py:344:10:344:27 | ControlFlowNode for Subscript | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:344:10:344:27 | ControlFlowNode for Subscript | Flow found | | test.py:344:10:344:27 | ControlFlowNode for Subscript | test.py:344:16:344:21 | ControlFlowNode for SOURCE | test.py:344:10:344:27 | ControlFlowNode for Subscript | Flow found | +| test.py:367:10:367:34 | ControlFlowNode for second() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:367:10:367:34 | ControlFlowNode for second() | Flow found | | test.py:367:10:367:34 | ControlFlowNode for second() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:367:10:367:34 | ControlFlowNode for second() | Flow found | | test.py:367:10:367:34 | ControlFlowNode for second() | test.py:367:28:367:33 | ControlFlowNode for SOURCE | test.py:367:10:367:34 | ControlFlowNode for second() | Flow found | +| test.py:375:10:375:36 | ControlFlowNode for second() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:375:10:375:36 | ControlFlowNode for second() | Flow found | | test.py:375:10:375:36 | ControlFlowNode for second() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:375:10:375:36 | ControlFlowNode for second() | Flow found | | test.py:375:10:375:36 | ControlFlowNode for second() | test.py:375:30:375:35 | ControlFlowNode for SOURCE | test.py:375:10:375:36 | ControlFlowNode for second() | Flow found | +| test.py:383:10:383:43 | ControlFlowNode for second() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:383:10:383:43 | ControlFlowNode for second() | Flow found | | test.py:383:10:383:43 | ControlFlowNode for second() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:383:10:383:43 | ControlFlowNode for second() | Flow found | | test.py:383:10:383:43 | ControlFlowNode for second() | test.py:383:36:383:41 | ControlFlowNode for SOURCE | test.py:383:10:383:43 | ControlFlowNode for second() | Flow found | +| test.py:391:10:391:39 | ControlFlowNode for f_extra_pos() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:391:10:391:39 | ControlFlowNode for f_extra_pos() | Flow found | | test.py:391:10:391:39 | ControlFlowNode for f_extra_pos() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:391:10:391:39 | ControlFlowNode for f_extra_pos() | Flow found | | test.py:391:10:391:39 | ControlFlowNode for f_extra_pos() | test.py:391:33:391:38 | ControlFlowNode for SOURCE | test.py:391:10:391:39 | ControlFlowNode for f_extra_pos() | Flow found | +| test.py:399:10:399:45 | ControlFlowNode for f_extra_keyword() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:399:10:399:45 | ControlFlowNode for f_extra_keyword() | Flow found | | test.py:399:10:399:45 | ControlFlowNode for f_extra_keyword() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:399:10:399:45 | ControlFlowNode for f_extra_keyword() | Flow found | | test.py:399:10:399:45 | ControlFlowNode for f_extra_keyword() | test.py:399:39:399:44 | ControlFlowNode for SOURCE | test.py:399:10:399:45 | ControlFlowNode for f_extra_keyword() | Flow found | +| test.py:420:10:420:38 | ControlFlowNode for IfExp | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:420:10:420:38 | ControlFlowNode for IfExp | Flow found | | test.py:420:10:420:38 | ControlFlowNode for IfExp | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:420:10:420:38 | ControlFlowNode for IfExp | Flow found | | test.py:420:10:420:38 | ControlFlowNode for IfExp | test.py:420:10:420:15 | ControlFlowNode for SOURCE | test.py:420:10:420:38 | ControlFlowNode for IfExp | Flow found | +| test.py:428:10:428:39 | ControlFlowNode for IfExp | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:428:10:428:39 | ControlFlowNode for IfExp | Flow found | | test.py:428:10:428:39 | ControlFlowNode for IfExp | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:428:10:428:39 | ControlFlowNode for IfExp | Flow found | | test.py:428:10:428:39 | ControlFlowNode for IfExp | test.py:428:34:428:39 | ControlFlowNode for SOURCE | test.py:428:10:428:39 | ControlFlowNode for IfExp | Flow found | +| test.py:452:10:452:18 | ControlFlowNode for f() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:452:10:452:18 | ControlFlowNode for f() | Flow found | | test.py:452:10:452:18 | ControlFlowNode for f() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:452:10:452:18 | ControlFlowNode for f() | Flow found | | test.py:452:10:452:18 | ControlFlowNode for f() | test.py:452:12:452:17 | ControlFlowNode for SOURCE | test.py:452:10:452:18 | ControlFlowNode for f() | Flow found | +| test.py:459:10:459:34 | ControlFlowNode for second() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:459:10:459:34 | ControlFlowNode for second() | Flow found | | test.py:459:10:459:34 | ControlFlowNode for second() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:459:10:459:34 | ControlFlowNode for second() | Flow found | | test.py:459:10:459:34 | ControlFlowNode for second() | test.py:459:28:459:33 | ControlFlowNode for SOURCE | test.py:459:10:459:34 | ControlFlowNode for second() | Flow found | +| test.py:473:10:473:36 | ControlFlowNode for second() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:473:10:473:36 | ControlFlowNode for second() | Flow found | | test.py:473:10:473:36 | ControlFlowNode for second() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:473:10:473:36 | ControlFlowNode for second() | Flow found | | test.py:473:10:473:36 | ControlFlowNode for second() | test.py:473:30:473:35 | ControlFlowNode for SOURCE | test.py:473:10:473:36 | ControlFlowNode for second() | Flow found | +| test.py:487:10:487:43 | ControlFlowNode for second() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:487:10:487:43 | ControlFlowNode for second() | Flow found | | test.py:487:10:487:43 | ControlFlowNode for second() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:487:10:487:43 | ControlFlowNode for second() | Flow found | | test.py:487:10:487:43 | ControlFlowNode for second() | test.py:487:36:487:41 | ControlFlowNode for SOURCE | test.py:487:10:487:43 | ControlFlowNode for second() | Flow found | +| test.py:492:10:492:39 | ControlFlowNode for f_extra_pos() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:492:10:492:39 | ControlFlowNode for f_extra_pos() | Flow found | | test.py:492:10:492:39 | ControlFlowNode for f_extra_pos() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:492:10:492:39 | ControlFlowNode for f_extra_pos() | Flow found | | test.py:492:10:492:39 | ControlFlowNode for f_extra_pos() | test.py:492:33:492:38 | ControlFlowNode for SOURCE | test.py:492:10:492:39 | ControlFlowNode for f_extra_pos() | Flow found | +| test.py:497:10:497:45 | ControlFlowNode for f_extra_keyword() | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:497:10:497:45 | ControlFlowNode for f_extra_keyword() | Flow found | | test.py:497:10:497:45 | ControlFlowNode for f_extra_keyword() | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:497:10:497:45 | ControlFlowNode for f_extra_keyword() | Flow found | | test.py:497:10:497:45 | ControlFlowNode for f_extra_keyword() | test.py:497:39:497:44 | ControlFlowNode for SOURCE | test.py:497:10:497:45 | ControlFlowNode for f_extra_keyword() | Flow found | +| test.py:511:10:511:10 | ControlFlowNode for a | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:511:10:511:10 | ControlFlowNode for a | Flow found | | test.py:511:10:511:10 | ControlFlowNode for a | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:511:10:511:10 | ControlFlowNode for a | Flow found | | test.py:511:10:511:10 | ControlFlowNode for a | test.py:509:9:509:14 | ControlFlowNode for SOURCE | test.py:511:10:511:10 | ControlFlowNode for a | Flow found | +| test.py:516:10:516:10 | ControlFlowNode for b | test.py:20:1:20:6 | ControlFlowNode for SOURCE | test.py:516:10:516:10 | ControlFlowNode for b | Flow found | | test.py:516:10:516:10 | ControlFlowNode for b | test.py:20:10:20:17 | ControlFlowNode for Str | test.py:516:10:516:10 | ControlFlowNode for b | Flow found | | test.py:516:10:516:10 | ControlFlowNode for b | test.py:509:9:509:14 | ControlFlowNode for SOURCE | test.py:516:10:516:10 | ControlFlowNode for b | Flow found | diff --git a/python/ql/test/experimental/dataflow/coverage/localFlow.expected b/python/ql/test/experimental/dataflow/coverage/localFlow.expected index f604e3d7b181..4407b91e81f5 100644 --- a/python/ql/test/experimental/dataflow/coverage/localFlow.expected +++ b/python/ql/test/experimental/dataflow/coverage/localFlow.expected @@ -1,16 +1,23 @@ | test.py:41:1:41:33 | GSSA Variable NONSOURCE | test.py:42:10:42:18 | ControlFlowNode for NONSOURCE | | test.py:41:1:41:33 | GSSA Variable SINK | test.py:44:5:44:8 | ControlFlowNode for SINK | | test.py:41:1:41:33 | GSSA Variable SOURCE | test.py:42:21:42:26 | ControlFlowNode for SOURCE | +| test.py:42:5:42:5 | ControlFlowNode for x | test.py:43:9:43:9 | ControlFlowNode for x | | test.py:42:5:42:5 | SSA variable x | test.py:43:9:43:9 | ControlFlowNode for x | -| test.py:42:10:42:26 | ControlFlowNode for Tuple | test.py:42:5:42:5 | SSA variable x | +| test.py:42:10:42:26 | ControlFlowNode for Tuple | test.py:42:5:42:5 | ControlFlowNode for x | +| test.py:43:5:43:5 | ControlFlowNode for y | test.py:44:10:44:10 | ControlFlowNode for y | | test.py:43:5:43:5 | SSA variable y | test.py:44:10:44:10 | ControlFlowNode for y | -| test.py:43:9:43:12 | ControlFlowNode for Subscript | test.py:43:5:43:5 | SSA variable y | +| test.py:43:9:43:12 | ControlFlowNode for Subscript | test.py:43:5:43:5 | ControlFlowNode for y | | test.py:187:1:187:53 | GSSA Variable SINK | test.py:189:5:189:8 | ControlFlowNode for SINK | | test.py:187:1:187:53 | GSSA Variable SOURCE | test.py:188:25:188:30 | ControlFlowNode for SOURCE | +| test.py:188:5:188:5 | ControlFlowNode for x | test.py:189:10:189:10 | ControlFlowNode for x | | test.py:188:5:188:5 | SSA variable x | test.py:189:10:189:10 | ControlFlowNode for x | -| test.py:188:9:188:68 | ControlFlowNode for ListComp | test.py:188:5:188:5 | SSA variable x | +| test.py:188:9:188:68 | ControlFlowNode for ListComp | test.py:188:5:188:5 | ControlFlowNode for x | | test.py:188:9:188:68 | SSA variable .0 | test.py:188:9:188:68 | ControlFlowNode for .0 | +| test.py:188:16:188:16 | ControlFlowNode for v | test.py:188:45:188:45 | ControlFlowNode for v | | test.py:188:16:188:16 | SSA variable v | test.py:188:45:188:45 | ControlFlowNode for v | +| test.py:188:40:188:40 | ControlFlowNode for u | test.py:188:56:188:56 | ControlFlowNode for u | | test.py:188:40:188:40 | SSA variable u | test.py:188:56:188:56 | ControlFlowNode for u | +| test.py:188:51:188:51 | ControlFlowNode for z | test.py:188:67:188:67 | ControlFlowNode for z | | test.py:188:51:188:51 | SSA variable z | test.py:188:67:188:67 | ControlFlowNode for z | +| test.py:188:62:188:62 | ControlFlowNode for y | test.py:188:10:188:10 | ControlFlowNode for y | | test.py:188:62:188:62 | SSA variable y | test.py:188:10:188:10 | ControlFlowNode for y | diff --git a/python/ql/test/experimental/dataflow/fieldflow/allLocalFlow.expected b/python/ql/test/experimental/dataflow/fieldflow/allLocalFlow.expected index e288b7fd157f..16f067958276 100644 --- a/python/ql/test/experimental/dataflow/fieldflow/allLocalFlow.expected +++ b/python/ql/test/experimental/dataflow/fieldflow/allLocalFlow.expected @@ -1,178 +1,216 @@ | examples.py:0:0:0:0 | GSSA Variable SINK | examples.py:28:1:28:4 | ControlFlowNode for SINK | | examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | | examples.py:0:0:0:0 | GSSA Variable object | examples.py:6:13:6:18 | ControlFlowNode for object | -| examples.py:6:1:6:20 | ControlFlowNode for ClassExpr | examples.py:6:7:6:11 | GSSA Variable MyObj | +| examples.py:6:1:6:20 | ControlFlowNode for ClassExpr | examples.py:6:7:6:11 | ControlFlowNode for MyObj | +| examples.py:6:7:6:11 | ControlFlowNode for MyObj | examples.py:6:7:6:11 | GSSA Variable MyObj | | examples.py:6:7:6:11 | GSSA Variable MyObj | examples.py:25:9:25:13 | ControlFlowNode for MyObj | | examples.py:6:13:6:18 | ControlFlowNode for object | examples.py:11:17:11:22 | ControlFlowNode for object | -| examples.py:7:5:7:28 | ControlFlowNode for FunctionExpr | examples.py:7:9:7:16 | SSA variable __init__ | -| examples.py:7:18:7:21 | ControlFlowNode for self | examples.py:7:18:7:21 | SSA variable self | +| examples.py:7:5:7:28 | ControlFlowNode for FunctionExpr | examples.py:7:9:7:16 | ControlFlowNode for __init__ | +| examples.py:7:18:7:21 | ControlFlowNode for self | examples.py:8:9:8:12 | ControlFlowNode for self | | examples.py:7:18:7:21 | SSA variable self | examples.py:8:9:8:12 | ControlFlowNode for self | -| examples.py:7:24:7:26 | ControlFlowNode for foo | examples.py:7:24:7:26 | SSA variable foo | +| examples.py:7:24:7:26 | ControlFlowNode for foo | examples.py:8:20:8:22 | ControlFlowNode for foo | | examples.py:7:24:7:26 | SSA variable foo | examples.py:8:20:8:22 | ControlFlowNode for foo | -| examples.py:11:1:11:24 | ControlFlowNode for ClassExpr | examples.py:11:7:11:15 | GSSA Variable NestedObj | +| examples.py:11:1:11:24 | ControlFlowNode for ClassExpr | examples.py:11:7:11:15 | ControlFlowNode for NestedObj | +| examples.py:11:7:11:15 | ControlFlowNode for NestedObj | examples.py:11:7:11:15 | GSSA Variable NestedObj | | examples.py:11:7:11:15 | GSSA Variable NestedObj | examples.py:33:5:33:13 | ControlFlowNode for NestedObj | -| examples.py:12:5:12:23 | ControlFlowNode for FunctionExpr | examples.py:12:9:12:16 | SSA variable __init__ | +| examples.py:12:5:12:23 | ControlFlowNode for FunctionExpr | examples.py:12:9:12:16 | ControlFlowNode for __init__ | | examples.py:12:5:12:23 | GSSA Variable MyObj | examples.py:13:20:13:24 | ControlFlowNode for MyObj | -| examples.py:12:18:12:21 | ControlFlowNode for self | examples.py:12:18:12:21 | SSA variable self | +| examples.py:12:18:12:21 | ControlFlowNode for self | examples.py:13:9:13:12 | ControlFlowNode for self | | examples.py:12:18:12:21 | SSA variable self | examples.py:13:9:13:12 | ControlFlowNode for self | -| examples.py:15:5:15:21 | ControlFlowNode for FunctionExpr | examples.py:15:9:15:14 | SSA variable getObj | -| examples.py:15:16:15:19 | ControlFlowNode for self | examples.py:15:16:15:19 | SSA variable self | +| examples.py:15:5:15:21 | ControlFlowNode for FunctionExpr | examples.py:15:9:15:14 | ControlFlowNode for getObj | +| examples.py:15:16:15:19 | ControlFlowNode for self | examples.py:16:16:16:19 | ControlFlowNode for self | | examples.py:15:16:15:19 | SSA variable self | examples.py:16:16:16:19 | ControlFlowNode for self | -| examples.py:20:1:20:19 | ControlFlowNode for FunctionExpr | examples.py:20:5:20:10 | GSSA Variable setFoo | +| examples.py:20:1:20:19 | ControlFlowNode for FunctionExpr | examples.py:20:5:20:10 | ControlFlowNode for setFoo | | examples.py:20:1:20:19 | GSSA Variable SINK_F | examples.py:21:5:21:10 | ControlFlowNode for SINK_F | +| examples.py:20:5:20:10 | ControlFlowNode for setFoo | examples.py:20:5:20:10 | GSSA Variable setFoo | | examples.py:20:5:20:10 | GSSA Variable setFoo | examples.py:27:1:27:6 | ControlFlowNode for setFoo | -| examples.py:20:12:20:14 | ControlFlowNode for obj | examples.py:20:12:20:14 | SSA variable obj | +| examples.py:20:12:20:14 | ControlFlowNode for obj | examples.py:21:12:21:14 | ControlFlowNode for obj | | examples.py:20:12:20:14 | SSA variable obj | examples.py:21:12:21:14 | ControlFlowNode for obj | -| examples.py:20:17:20:17 | ControlFlowNode for x | examples.py:20:17:20:17 | SSA variable x | +| examples.py:20:17:20:17 | ControlFlowNode for x | examples.py:22:15:22:15 | ControlFlowNode for x | | examples.py:20:17:20:17 | SSA variable x | examples.py:22:15:22:15 | ControlFlowNode for x | | examples.py:21:12:21:14 | ControlFlowNode for obj | examples.py:22:5:22:7 | ControlFlowNode for obj | | examples.py:21:12:21:14 | [post read] ControlFlowNode for obj | examples.py:22:5:22:7 | ControlFlowNode for obj | +| examples.py:25:1:25:5 | ControlFlowNode for myobj | examples.py:25:1:25:5 | GSSA Variable myobj | | examples.py:25:1:25:5 | GSSA Variable myobj | examples.py:27:8:27:12 | ControlFlowNode for myobj | | examples.py:25:9:25:13 | ControlFlowNode for MyObj | examples.py:49:7:49:11 | ControlFlowNode for MyObj | -| examples.py:25:9:25:19 | ControlFlowNode for MyObj() | examples.py:25:1:25:5 | GSSA Variable myobj | +| examples.py:25:9:25:19 | ControlFlowNode for MyObj() | examples.py:25:1:25:5 | ControlFlowNode for myobj | | examples.py:27:8:27:12 | ControlFlowNode for myobj | examples.py:28:6:28:10 | ControlFlowNode for myobj | | examples.py:27:8:27:12 | [post arg] ControlFlowNode for myobj | examples.py:28:6:28:10 | ControlFlowNode for myobj | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | | examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | | examples.py:28:1:28:4 | ControlFlowNode for SINK | examples.py:37:1:37:4 | ControlFlowNode for SINK | +| examples.py:31:1:31:1 | ControlFlowNode for x | examples.py:31:1:31:1 | GSSA Variable x | | examples.py:31:1:31:1 | GSSA Variable x | examples.py:35:13:35:13 | ControlFlowNode for x | -| examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:31:1:31:1 | GSSA Variable x | +| examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:31:1:31:1 | ControlFlowNode for x | | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:40:5:40:10 | ControlFlowNode for SOURCE | +| examples.py:33:1:33:1 | ControlFlowNode for a | examples.py:33:1:33:1 | GSSA Variable a | | examples.py:33:1:33:1 | GSSA Variable a | examples.py:35:1:35:1 | ControlFlowNode for a | | examples.py:33:5:33:13 | ControlFlowNode for NestedObj | examples.py:42:5:42:13 | ControlFlowNode for NestedObj | -| examples.py:33:5:33:15 | ControlFlowNode for NestedObj() | examples.py:33:1:33:1 | GSSA Variable a | +| examples.py:33:5:33:15 | ControlFlowNode for NestedObj() | examples.py:33:1:33:1 | ControlFlowNode for a | | examples.py:35:1:35:1 | ControlFlowNode for a | examples.py:37:6:37:6 | ControlFlowNode for a | | examples.py:35:1:35:1 | [post read] ControlFlowNode for a | examples.py:37:6:37:6 | ControlFlowNode for a | | examples.py:37:1:37:4 | ControlFlowNode for SINK | examples.py:46:1:46:4 | ControlFlowNode for SINK | +| examples.py:40:1:40:1 | ControlFlowNode for x | examples.py:40:1:40:1 | GSSA Variable x | | examples.py:40:1:40:1 | GSSA Variable x | examples.py:44:18:44:18 | ControlFlowNode for x | -| examples.py:40:5:40:10 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | GSSA Variable x | +| examples.py:40:5:40:10 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | ControlFlowNode for x | | examples.py:40:5:40:10 | ControlFlowNode for SOURCE | examples.py:49:13:49:18 | ControlFlowNode for SOURCE | +| examples.py:42:1:42:1 | ControlFlowNode for a | examples.py:42:1:42:1 | GSSA Variable a | | examples.py:42:1:42:1 | GSSA Variable a | examples.py:44:1:44:1 | ControlFlowNode for a | -| examples.py:42:5:42:15 | ControlFlowNode for NestedObj() | examples.py:42:1:42:1 | GSSA Variable a | +| examples.py:42:5:42:15 | ControlFlowNode for NestedObj() | examples.py:42:1:42:1 | ControlFlowNode for a | | examples.py:44:1:44:1 | ControlFlowNode for a | examples.py:46:6:46:6 | ControlFlowNode for a | | examples.py:44:1:44:1 | [post read] ControlFlowNode for a | examples.py:46:6:46:6 | ControlFlowNode for a | | examples.py:46:1:46:4 | ControlFlowNode for SINK | examples.py:50:1:50:4 | ControlFlowNode for SINK | +| examples.py:49:1:49:3 | ControlFlowNode for obj | examples.py:49:1:49:3 | GSSA Variable obj | | examples.py:49:1:49:3 | GSSA Variable obj | examples.py:50:6:50:8 | ControlFlowNode for obj | -| examples.py:49:7:49:19 | ControlFlowNode for MyObj() | examples.py:49:1:49:3 | GSSA Variable obj | +| examples.py:49:7:49:19 | ControlFlowNode for MyObj() | examples.py:49:1:49:3 | ControlFlowNode for obj | | examples.py:49:13:49:18 | ControlFlowNode for SOURCE | examples.py:59:29:59:34 | ControlFlowNode for SOURCE | | examples.py:49:13:49:18 | [post arg] ControlFlowNode for SOURCE | examples.py:59:29:59:34 | ControlFlowNode for SOURCE | | examples.py:50:1:50:4 | ControlFlowNode for SINK | examples.py:59:1:59:4 | ControlFlowNode for SINK | -| examples.py:53:1:53:30 | ControlFlowNode for FunctionExpr | examples.py:53:5:53:26 | GSSA Variable fields_with_local_flow | +| examples.py:53:1:53:30 | ControlFlowNode for FunctionExpr | examples.py:53:5:53:26 | ControlFlowNode for fields_with_local_flow | | examples.py:53:1:53:30 | GSSA Variable MyObj | examples.py:54:11:54:15 | ControlFlowNode for MyObj | +| examples.py:53:5:53:26 | ControlFlowNode for fields_with_local_flow | examples.py:53:5:53:26 | GSSA Variable fields_with_local_flow | | examples.py:53:5:53:26 | GSSA Variable fields_with_local_flow | examples.py:59:6:59:27 | ControlFlowNode for fields_with_local_flow | -| examples.py:53:28:53:28 | ControlFlowNode for x | examples.py:53:28:53:28 | SSA variable x | +| examples.py:53:28:53:28 | ControlFlowNode for x | examples.py:54:17:54:17 | ControlFlowNode for x | | examples.py:53:28:53:28 | SSA variable x | examples.py:54:17:54:17 | ControlFlowNode for x | +| examples.py:54:5:54:7 | ControlFlowNode for obj | examples.py:55:9:55:11 | ControlFlowNode for obj | | examples.py:54:5:54:7 | SSA variable obj | examples.py:55:9:55:11 | ControlFlowNode for obj | -| examples.py:54:11:54:18 | ControlFlowNode for MyObj() | examples.py:54:5:54:7 | SSA variable obj | +| examples.py:54:11:54:18 | ControlFlowNode for MyObj() | examples.py:54:5:54:7 | ControlFlowNode for obj | +| examples.py:55:5:55:5 | ControlFlowNode for a | examples.py:56:12:56:12 | ControlFlowNode for a | | examples.py:55:5:55:5 | SSA variable a | examples.py:56:12:56:12 | ControlFlowNode for a | -| examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:55:5:55:5 | SSA variable a | -| test.py:2:13:2:26 | ControlFlowNode for Str | test.py:2:1:2:9 | GSSA Variable NONSOURCE | -| test.py:3:10:3:17 | ControlFlowNode for Str | test.py:3:1:3:6 | GSSA Variable SOURCE | -| test.py:6:1:6:17 | ControlFlowNode for FunctionExpr | test.py:6:5:6:13 | GSSA Variable is_source | -| test.py:6:15:6:15 | ControlFlowNode for x | test.py:6:15:6:15 | SSA variable x | +| examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:55:5:55:5 | ControlFlowNode for a | +| test.py:2:1:2:9 | ControlFlowNode for NONSOURCE | test.py:2:1:2:9 | GSSA Variable NONSOURCE | +| test.py:2:13:2:26 | ControlFlowNode for Str | test.py:2:1:2:9 | ControlFlowNode for NONSOURCE | +| test.py:3:1:3:6 | ControlFlowNode for SOURCE | test.py:3:1:3:6 | GSSA Variable SOURCE | +| test.py:3:10:3:17 | ControlFlowNode for Str | test.py:3:1:3:6 | ControlFlowNode for SOURCE | +| test.py:6:1:6:17 | ControlFlowNode for FunctionExpr | test.py:6:5:6:13 | ControlFlowNode for is_source | +| test.py:6:5:6:13 | ControlFlowNode for is_source | test.py:6:5:6:13 | GSSA Variable is_source | +| test.py:6:15:6:15 | ControlFlowNode for x | test.py:7:12:7:12 | ControlFlowNode for x | | test.py:6:15:6:15 | SSA variable x | test.py:7:12:7:12 | ControlFlowNode for x | | test.py:7:12:7:12 | ControlFlowNode for x | test.py:7:29:7:29 | ControlFlowNode for x | | test.py:7:29:7:29 | ControlFlowNode for x | test.py:7:47:7:47 | ControlFlowNode for x | | test.py:7:47:7:47 | ControlFlowNode for x | test.py:7:58:7:58 | ControlFlowNode for x | | test.py:7:58:7:58 | ControlFlowNode for x | test.py:7:71:7:71 | ControlFlowNode for x | -| test.py:10:1:10:12 | ControlFlowNode for FunctionExpr | test.py:10:5:10:8 | GSSA Variable SINK | +| test.py:10:1:10:12 | ControlFlowNode for FunctionExpr | test.py:10:5:10:8 | ControlFlowNode for SINK | | test.py:10:1:10:12 | GSSA Variable is_source | test.py:11:8:11:16 | ControlFlowNode for is_source | -| test.py:10:10:10:10 | ControlFlowNode for x | test.py:10:10:10:10 | SSA variable x | +| test.py:10:5:10:8 | ControlFlowNode for SINK | test.py:10:5:10:8 | GSSA Variable SINK | +| test.py:10:10:10:10 | ControlFlowNode for x | test.py:11:18:11:18 | ControlFlowNode for x | | test.py:10:10:10:10 | SSA variable x | test.py:11:18:11:18 | ControlFlowNode for x | | test.py:11:18:11:18 | ControlFlowNode for x | test.py:14:34:14:34 | ControlFlowNode for x | | test.py:11:18:11:18 | [post arg] ControlFlowNode for x | test.py:14:34:14:34 | ControlFlowNode for x | -| test.py:17:1:17:14 | ControlFlowNode for FunctionExpr | test.py:17:5:17:10 | GSSA Variable SINK_F | +| test.py:17:1:17:14 | ControlFlowNode for FunctionExpr | test.py:17:5:17:10 | ControlFlowNode for SINK_F | | test.py:17:1:17:14 | GSSA Variable is_source | test.py:18:8:18:16 | ControlFlowNode for is_source | -| test.py:17:12:17:12 | ControlFlowNode for x | test.py:17:12:17:12 | SSA variable x | +| test.py:17:5:17:10 | ControlFlowNode for SINK_F | test.py:17:5:17:10 | GSSA Variable SINK_F | +| test.py:17:12:17:12 | ControlFlowNode for x | test.py:18:18:18:18 | ControlFlowNode for x | | test.py:17:12:17:12 | SSA variable x | test.py:18:18:18:18 | ControlFlowNode for x | | test.py:18:18:18:18 | ControlFlowNode for x | test.py:19:34:19:34 | ControlFlowNode for x | | test.py:18:18:18:18 | [post arg] ControlFlowNode for x | test.py:19:34:19:34 | ControlFlowNode for x | -| test.py:25:1:25:20 | ControlFlowNode for ClassExpr | test.py:25:7:25:11 | GSSA Variable MyObj | +| test.py:25:1:25:20 | ControlFlowNode for ClassExpr | test.py:25:7:25:11 | ControlFlowNode for MyObj | +| test.py:25:7:25:11 | ControlFlowNode for MyObj | test.py:25:7:25:11 | GSSA Variable MyObj | | test.py:25:13:25:18 | ControlFlowNode for object | test.py:33:17:33:22 | ControlFlowNode for object | -| test.py:26:5:26:28 | ControlFlowNode for FunctionExpr | test.py:26:9:26:16 | SSA variable __init__ | -| test.py:26:18:26:21 | ControlFlowNode for self | test.py:26:18:26:21 | SSA variable self | +| test.py:26:5:26:28 | ControlFlowNode for FunctionExpr | test.py:26:9:26:16 | ControlFlowNode for __init__ | +| test.py:26:18:26:21 | ControlFlowNode for self | test.py:27:9:27:12 | ControlFlowNode for self | | test.py:26:18:26:21 | SSA variable self | test.py:27:9:27:12 | ControlFlowNode for self | -| test.py:26:24:26:26 | ControlFlowNode for foo | test.py:26:24:26:26 | SSA variable foo | +| test.py:26:24:26:26 | ControlFlowNode for foo | test.py:27:20:27:22 | ControlFlowNode for foo | | test.py:26:24:26:26 | SSA variable foo | test.py:27:20:27:22 | ControlFlowNode for foo | -| test.py:29:5:29:26 | ControlFlowNode for FunctionExpr | test.py:29:9:29:14 | SSA variable setFoo | -| test.py:29:16:29:19 | ControlFlowNode for self | test.py:29:16:29:19 | SSA variable self | +| test.py:29:5:29:26 | ControlFlowNode for FunctionExpr | test.py:29:9:29:14 | ControlFlowNode for setFoo | +| test.py:29:16:29:19 | ControlFlowNode for self | test.py:30:9:30:12 | ControlFlowNode for self | | test.py:29:16:29:19 | SSA variable self | test.py:30:9:30:12 | ControlFlowNode for self | -| test.py:29:22:29:24 | ControlFlowNode for foo | test.py:29:22:29:24 | SSA variable foo | +| test.py:29:22:29:24 | ControlFlowNode for foo | test.py:30:20:30:22 | ControlFlowNode for foo | | test.py:29:22:29:24 | SSA variable foo | test.py:30:20:30:22 | ControlFlowNode for foo | -| test.py:33:1:33:24 | ControlFlowNode for ClassExpr | test.py:33:7:33:15 | GSSA Variable NestedObj | -| test.py:34:5:34:23 | ControlFlowNode for FunctionExpr | test.py:34:9:34:16 | SSA variable __init__ | +| test.py:33:1:33:24 | ControlFlowNode for ClassExpr | test.py:33:7:33:15 | ControlFlowNode for NestedObj | +| test.py:33:7:33:15 | ControlFlowNode for NestedObj | test.py:33:7:33:15 | GSSA Variable NestedObj | +| test.py:34:5:34:23 | ControlFlowNode for FunctionExpr | test.py:34:9:34:16 | ControlFlowNode for __init__ | | test.py:34:5:34:23 | GSSA Variable MyObj | test.py:35:20:35:24 | ControlFlowNode for MyObj | -| test.py:34:18:34:21 | ControlFlowNode for self | test.py:34:18:34:21 | SSA variable self | +| test.py:34:18:34:21 | ControlFlowNode for self | test.py:35:9:35:12 | ControlFlowNode for self | | test.py:34:18:34:21 | SSA variable self | test.py:35:9:35:12 | ControlFlowNode for self | -| test.py:37:5:37:21 | ControlFlowNode for FunctionExpr | test.py:37:9:37:14 | SSA variable getObj | -| test.py:37:16:37:19 | ControlFlowNode for self | test.py:37:16:37:19 | SSA variable self | +| test.py:37:5:37:21 | ControlFlowNode for FunctionExpr | test.py:37:9:37:14 | ControlFlowNode for getObj | +| test.py:37:16:37:19 | ControlFlowNode for self | test.py:38:16:38:19 | ControlFlowNode for self | | test.py:37:16:37:19 | SSA variable self | test.py:38:16:38:19 | ControlFlowNode for self | -| test.py:41:1:41:19 | ControlFlowNode for FunctionExpr | test.py:41:5:41:10 | GSSA Variable setFoo | +| test.py:41:1:41:19 | ControlFlowNode for FunctionExpr | test.py:41:5:41:10 | ControlFlowNode for setFoo | | test.py:41:1:41:19 | GSSA Variable SINK_F | test.py:42:5:42:10 | ControlFlowNode for SINK_F | -| test.py:41:12:41:14 | ControlFlowNode for obj | test.py:41:12:41:14 | SSA variable obj | +| test.py:41:5:41:10 | ControlFlowNode for setFoo | test.py:41:5:41:10 | GSSA Variable setFoo | +| test.py:41:12:41:14 | ControlFlowNode for obj | test.py:42:12:42:14 | ControlFlowNode for obj | | test.py:41:12:41:14 | SSA variable obj | test.py:42:12:42:14 | ControlFlowNode for obj | -| test.py:41:17:41:17 | ControlFlowNode for x | test.py:41:17:41:17 | SSA variable x | +| test.py:41:17:41:17 | ControlFlowNode for x | test.py:43:15:43:15 | ControlFlowNode for x | | test.py:41:17:41:17 | SSA variable x | test.py:43:15:43:15 | ControlFlowNode for x | | test.py:42:12:42:14 | ControlFlowNode for obj | test.py:43:5:43:7 | ControlFlowNode for obj | | test.py:42:12:42:14 | [post read] ControlFlowNode for obj | test.py:43:5:43:7 | ControlFlowNode for obj | -| test.py:46:1:46:20 | ControlFlowNode for FunctionExpr | test.py:46:5:46:17 | GSSA Variable test_example1 | +| test.py:46:1:46:20 | ControlFlowNode for FunctionExpr | test.py:46:5:46:17 | ControlFlowNode for test_example1 | | test.py:46:1:46:20 | GSSA Variable MyObj | test.py:47:13:47:17 | ControlFlowNode for MyObj | | test.py:46:1:46:20 | GSSA Variable SINK | test.py:50:5:50:8 | ControlFlowNode for SINK | | test.py:46:1:46:20 | GSSA Variable SOURCE | test.py:49:19:49:24 | ControlFlowNode for SOURCE | | test.py:46:1:46:20 | GSSA Variable setFoo | test.py:49:5:49:10 | ControlFlowNode for setFoo | +| test.py:46:5:46:17 | ControlFlowNode for test_example1 | test.py:46:5:46:17 | GSSA Variable test_example1 | +| test.py:47:5:47:9 | ControlFlowNode for myobj | test.py:49:12:49:16 | ControlFlowNode for myobj | | test.py:47:5:47:9 | SSA variable myobj | test.py:49:12:49:16 | ControlFlowNode for myobj | -| test.py:47:13:47:23 | ControlFlowNode for MyObj() | test.py:47:5:47:9 | SSA variable myobj | +| test.py:47:13:47:23 | ControlFlowNode for MyObj() | test.py:47:5:47:9 | ControlFlowNode for myobj | | test.py:49:12:49:16 | ControlFlowNode for myobj | test.py:50:10:50:14 | ControlFlowNode for myobj | | test.py:49:12:49:16 | [post arg] ControlFlowNode for myobj | test.py:50:10:50:14 | ControlFlowNode for myobj | -| test.py:53:1:53:27 | ControlFlowNode for FunctionExpr | test.py:53:5:53:24 | GSSA Variable test_example1_method | +| test.py:53:1:53:27 | ControlFlowNode for FunctionExpr | test.py:53:5:53:24 | ControlFlowNode for test_example1_method | | test.py:53:1:53:27 | GSSA Variable MyObj | test.py:54:13:54:17 | ControlFlowNode for MyObj | | test.py:53:1:53:27 | GSSA Variable SINK | test.py:57:5:57:8 | ControlFlowNode for SINK | | test.py:53:1:53:27 | GSSA Variable SOURCE | test.py:56:18:56:23 | ControlFlowNode for SOURCE | +| test.py:53:5:53:24 | ControlFlowNode for test_example1_method | test.py:53:5:53:24 | GSSA Variable test_example1_method | +| test.py:54:5:54:9 | ControlFlowNode for myobj | test.py:56:5:56:9 | ControlFlowNode for myobj | | test.py:54:5:54:9 | SSA variable myobj | test.py:56:5:56:9 | ControlFlowNode for myobj | -| test.py:54:13:54:23 | ControlFlowNode for MyObj() | test.py:54:5:54:9 | SSA variable myobj | +| test.py:54:13:54:23 | ControlFlowNode for MyObj() | test.py:54:5:54:9 | ControlFlowNode for myobj | | test.py:56:5:56:9 | ControlFlowNode for myobj | test.py:57:10:57:14 | ControlFlowNode for myobj | | test.py:56:5:56:9 | [post read] ControlFlowNode for myobj | test.py:57:10:57:14 | ControlFlowNode for myobj | -| test.py:60:1:60:20 | ControlFlowNode for FunctionExpr | test.py:60:5:60:17 | GSSA Variable test_example2 | +| test.py:60:1:60:20 | ControlFlowNode for FunctionExpr | test.py:60:5:60:17 | ControlFlowNode for test_example2 | | test.py:60:1:60:20 | GSSA Variable NestedObj | test.py:63:9:63:17 | ControlFlowNode for NestedObj | | test.py:60:1:60:20 | GSSA Variable SINK | test.py:67:5:67:8 | ControlFlowNode for SINK | | test.py:60:1:60:20 | GSSA Variable SOURCE | test.py:61:9:61:14 | ControlFlowNode for SOURCE | +| test.py:60:5:60:17 | ControlFlowNode for test_example2 | test.py:60:5:60:17 | GSSA Variable test_example2 | +| test.py:61:5:61:5 | ControlFlowNode for x | test.py:65:17:65:17 | ControlFlowNode for x | | test.py:61:5:61:5 | SSA variable x | test.py:65:17:65:17 | ControlFlowNode for x | -| test.py:61:9:61:14 | ControlFlowNode for SOURCE | test.py:61:5:61:5 | SSA variable x | +| test.py:61:9:61:14 | ControlFlowNode for SOURCE | test.py:61:5:61:5 | ControlFlowNode for x | +| test.py:63:5:63:5 | ControlFlowNode for a | test.py:65:5:65:5 | ControlFlowNode for a | | test.py:63:5:63:5 | SSA variable a | test.py:65:5:65:5 | ControlFlowNode for a | -| test.py:63:9:63:19 | ControlFlowNode for NestedObj() | test.py:63:5:63:5 | SSA variable a | +| test.py:63:9:63:19 | ControlFlowNode for NestedObj() | test.py:63:5:63:5 | ControlFlowNode for a | | test.py:65:5:65:5 | ControlFlowNode for a | test.py:67:10:67:10 | ControlFlowNode for a | | test.py:65:5:65:5 | [post read] ControlFlowNode for a | test.py:67:10:67:10 | ControlFlowNode for a | -| test.py:70:1:70:27 | ControlFlowNode for FunctionExpr | test.py:70:5:70:24 | GSSA Variable test_example2_method | +| test.py:70:1:70:27 | ControlFlowNode for FunctionExpr | test.py:70:5:70:24 | ControlFlowNode for test_example2_method | | test.py:70:1:70:27 | GSSA Variable NestedObj | test.py:73:9:73:17 | ControlFlowNode for NestedObj | | test.py:70:1:70:27 | GSSA Variable SINK | test.py:77:5:77:8 | ControlFlowNode for SINK | | test.py:70:1:70:27 | GSSA Variable SOURCE | test.py:71:9:71:14 | ControlFlowNode for SOURCE | +| test.py:70:5:70:24 | ControlFlowNode for test_example2_method | test.py:70:5:70:24 | GSSA Variable test_example2_method | +| test.py:71:5:71:5 | ControlFlowNode for x | test.py:75:22:75:22 | ControlFlowNode for x | | test.py:71:5:71:5 | SSA variable x | test.py:75:22:75:22 | ControlFlowNode for x | -| test.py:71:9:71:14 | ControlFlowNode for SOURCE | test.py:71:5:71:5 | SSA variable x | +| test.py:71:9:71:14 | ControlFlowNode for SOURCE | test.py:71:5:71:5 | ControlFlowNode for x | +| test.py:73:5:73:5 | ControlFlowNode for a | test.py:75:5:75:5 | ControlFlowNode for a | | test.py:73:5:73:5 | SSA variable a | test.py:75:5:75:5 | ControlFlowNode for a | -| test.py:73:9:73:19 | ControlFlowNode for NestedObj() | test.py:73:5:73:5 | SSA variable a | +| test.py:73:9:73:19 | ControlFlowNode for NestedObj() | test.py:73:5:73:5 | ControlFlowNode for a | | test.py:75:5:75:5 | ControlFlowNode for a | test.py:77:10:77:10 | ControlFlowNode for a | | test.py:75:5:75:5 | [post read] ControlFlowNode for a | test.py:77:10:77:10 | ControlFlowNode for a | -| test.py:80:1:80:20 | ControlFlowNode for FunctionExpr | test.py:80:5:80:17 | GSSA Variable test_example3 | +| test.py:80:1:80:20 | ControlFlowNode for FunctionExpr | test.py:80:5:80:17 | ControlFlowNode for test_example3 | | test.py:80:1:80:20 | GSSA Variable MyObj | test.py:81:11:81:15 | ControlFlowNode for MyObj | | test.py:80:1:80:20 | GSSA Variable SINK | test.py:82:5:82:8 | ControlFlowNode for SINK | | test.py:80:1:80:20 | GSSA Variable SOURCE | test.py:81:17:81:22 | ControlFlowNode for SOURCE | +| test.py:80:5:80:17 | ControlFlowNode for test_example3 | test.py:80:5:80:17 | GSSA Variable test_example3 | +| test.py:81:5:81:7 | ControlFlowNode for obj | test.py:82:10:82:12 | ControlFlowNode for obj | | test.py:81:5:81:7 | SSA variable obj | test.py:82:10:82:12 | ControlFlowNode for obj | -| test.py:81:11:81:23 | ControlFlowNode for MyObj() | test.py:81:5:81:7 | SSA variable obj | -| test.py:85:1:85:23 | ControlFlowNode for FunctionExpr | test.py:85:5:85:20 | GSSA Variable test_example3_kw | +| test.py:81:11:81:23 | ControlFlowNode for MyObj() | test.py:81:5:81:7 | ControlFlowNode for obj | +| test.py:85:1:85:23 | ControlFlowNode for FunctionExpr | test.py:85:5:85:20 | ControlFlowNode for test_example3_kw | | test.py:85:1:85:23 | GSSA Variable MyObj | test.py:86:11:86:15 | ControlFlowNode for MyObj | | test.py:85:1:85:23 | GSSA Variable SINK | test.py:87:5:87:8 | ControlFlowNode for SINK | | test.py:85:1:85:23 | GSSA Variable SOURCE | test.py:86:21:86:26 | ControlFlowNode for SOURCE | +| test.py:85:5:85:20 | ControlFlowNode for test_example3_kw | test.py:85:5:85:20 | GSSA Variable test_example3_kw | +| test.py:86:5:86:7 | ControlFlowNode for obj | test.py:87:10:87:12 | ControlFlowNode for obj | | test.py:86:5:86:7 | SSA variable obj | test.py:87:10:87:12 | ControlFlowNode for obj | -| test.py:86:11:86:27 | ControlFlowNode for MyObj() | test.py:86:5:86:7 | SSA variable obj | -| test.py:90:1:90:30 | ControlFlowNode for FunctionExpr | test.py:90:5:90:26 | GSSA Variable fields_with_local_flow | +| test.py:86:11:86:27 | ControlFlowNode for MyObj() | test.py:86:5:86:7 | ControlFlowNode for obj | +| test.py:90:1:90:30 | ControlFlowNode for FunctionExpr | test.py:90:5:90:26 | ControlFlowNode for fields_with_local_flow | | test.py:90:1:90:30 | GSSA Variable MyObj | test.py:91:11:91:15 | ControlFlowNode for MyObj | -| test.py:90:28:90:28 | ControlFlowNode for x | test.py:90:28:90:28 | SSA variable x | +| test.py:90:5:90:26 | ControlFlowNode for fields_with_local_flow | test.py:90:5:90:26 | GSSA Variable fields_with_local_flow | +| test.py:90:28:90:28 | ControlFlowNode for x | test.py:91:17:91:17 | ControlFlowNode for x | | test.py:90:28:90:28 | SSA variable x | test.py:91:17:91:17 | ControlFlowNode for x | +| test.py:91:5:91:7 | ControlFlowNode for obj | test.py:92:9:92:11 | ControlFlowNode for obj | | test.py:91:5:91:7 | SSA variable obj | test.py:92:9:92:11 | ControlFlowNode for obj | -| test.py:91:11:91:18 | ControlFlowNode for MyObj() | test.py:91:5:91:7 | SSA variable obj | +| test.py:91:11:91:18 | ControlFlowNode for MyObj() | test.py:91:5:91:7 | ControlFlowNode for obj | +| test.py:92:5:92:5 | ControlFlowNode for a | test.py:93:12:93:12 | ControlFlowNode for a | | test.py:92:5:92:5 | SSA variable a | test.py:93:12:93:12 | ControlFlowNode for a | -| test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:92:5:92:5 | SSA variable a | -| test.py:96:1:96:18 | ControlFlowNode for FunctionExpr | test.py:96:5:96:15 | GSSA Variable test_fields | +| test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:92:5:92:5 | ControlFlowNode for a | +| test.py:96:1:96:18 | ControlFlowNode for FunctionExpr | test.py:96:5:96:15 | ControlFlowNode for test_fields | | test.py:96:1:96:18 | GSSA Variable SINK | test.py:97:5:97:8 | ControlFlowNode for SINK | | test.py:96:1:96:18 | GSSA Variable SOURCE | test.py:97:33:97:38 | ControlFlowNode for SOURCE | | test.py:96:1:96:18 | GSSA Variable fields_with_local_flow | test.py:97:10:97:31 | ControlFlowNode for fields_with_local_flow | +| test.py:96:5:96:15 | ControlFlowNode for test_fields | test.py:96:5:96:15 | GSSA Variable test_fields | diff --git a/python/ql/test/experimental/dataflow/fieldflow/dataflow.expected b/python/ql/test/experimental/dataflow/fieldflow/dataflow.expected index 168ff7e66ce4..604ac5a87b76 100644 --- a/python/ql/test/experimental/dataflow/fieldflow/dataflow.expected +++ b/python/ql/test/experimental/dataflow/fieldflow/dataflow.expected @@ -27,6 +27,7 @@ edges | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module test | test.py:81:17:81:22 | ControlFlowNode for SOURCE | | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module test | test.py:86:21:86:26 | ControlFlowNode for SOURCE | | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module test | test.py:97:33:97:38 | ControlFlowNode for SOURCE | +| test.py:3:1:3:6 | ControlFlowNode for SOURCE | test.py:3:1:3:6 | GSSA Variable SOURCE | | test.py:3:1:3:6 | GSSA Variable SOURCE | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module test | | test.py:3:10:3:17 | ControlFlowNode for Str | test.py:3:1:3:6 | GSSA Variable SOURCE | | test.py:49:12:49:16 | [post arg] ControlFlowNode for myobj [Attribute foo] | test.py:50:10:50:14 | ControlFlowNode for myobj [Attribute foo] | @@ -74,6 +75,7 @@ nodes | examples.py:59:6:59:35 | ControlFlowNode for fields_with_local_flow() | semmle.label | ControlFlowNode for fields_with_local_flow() | | examples.py:59:29:59:34 | ControlFlowNode for SOURCE | semmle.label | ControlFlowNode for SOURCE | | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module test | semmle.label | ModuleVariableNode for Global Variable SOURCE in Module test | +| test.py:3:1:3:6 | ControlFlowNode for SOURCE | semmle.label | ControlFlowNode for SOURCE | | test.py:3:1:3:6 | GSSA Variable SOURCE | semmle.label | GSSA Variable SOURCE | | test.py:3:10:3:17 | ControlFlowNode for Str | semmle.label | ControlFlowNode for Str | | test.py:49:12:49:16 | [post arg] ControlFlowNode for myobj [Attribute foo] | semmle.label | [post arg] ControlFlowNode for myobj [Attribute foo] | @@ -121,17 +123,24 @@ nodes | examples.py:59:6:59:35 | ControlFlowNode for fields_with_local_flow() | examples.py:40:5:40:10 | ControlFlowNode for SOURCE | examples.py:59:6:59:35 | ControlFlowNode for fields_with_local_flow() | Flow found | | examples.py:59:6:59:35 | ControlFlowNode for fields_with_local_flow() | examples.py:49:13:49:18 | ControlFlowNode for SOURCE | examples.py:59:6:59:35 | ControlFlowNode for fields_with_local_flow() | Flow found | | examples.py:59:6:59:35 | ControlFlowNode for fields_with_local_flow() | examples.py:59:29:59:34 | ControlFlowNode for SOURCE | examples.py:59:6:59:35 | ControlFlowNode for fields_with_local_flow() | Flow found | +| test.py:50:10:50:18 | ControlFlowNode for Attribute | test.py:3:1:3:6 | ControlFlowNode for SOURCE | test.py:50:10:50:18 | ControlFlowNode for Attribute | Flow found | | test.py:50:10:50:18 | ControlFlowNode for Attribute | test.py:3:10:3:17 | ControlFlowNode for Str | test.py:50:10:50:18 | ControlFlowNode for Attribute | Flow found | | test.py:50:10:50:18 | ControlFlowNode for Attribute | test.py:49:19:49:24 | ControlFlowNode for SOURCE | test.py:50:10:50:18 | ControlFlowNode for Attribute | Flow found | +| test.py:57:10:57:18 | ControlFlowNode for Attribute | test.py:3:1:3:6 | ControlFlowNode for SOURCE | test.py:57:10:57:18 | ControlFlowNode for Attribute | Flow found | | test.py:57:10:57:18 | ControlFlowNode for Attribute | test.py:3:10:3:17 | ControlFlowNode for Str | test.py:57:10:57:18 | ControlFlowNode for Attribute | Flow found | | test.py:57:10:57:18 | ControlFlowNode for Attribute | test.py:56:18:56:23 | ControlFlowNode for SOURCE | test.py:57:10:57:18 | ControlFlowNode for Attribute | Flow found | +| test.py:67:10:67:18 | ControlFlowNode for Attribute | test.py:3:1:3:6 | ControlFlowNode for SOURCE | test.py:67:10:67:18 | ControlFlowNode for Attribute | Flow found | | test.py:67:10:67:18 | ControlFlowNode for Attribute | test.py:3:10:3:17 | ControlFlowNode for Str | test.py:67:10:67:18 | ControlFlowNode for Attribute | Flow found | | test.py:67:10:67:18 | ControlFlowNode for Attribute | test.py:61:9:61:14 | ControlFlowNode for SOURCE | test.py:67:10:67:18 | ControlFlowNode for Attribute | Flow found | +| test.py:77:10:77:18 | ControlFlowNode for Attribute | test.py:3:1:3:6 | ControlFlowNode for SOURCE | test.py:77:10:77:18 | ControlFlowNode for Attribute | Flow found | | test.py:77:10:77:18 | ControlFlowNode for Attribute | test.py:3:10:3:17 | ControlFlowNode for Str | test.py:77:10:77:18 | ControlFlowNode for Attribute | Flow found | | test.py:77:10:77:18 | ControlFlowNode for Attribute | test.py:71:9:71:14 | ControlFlowNode for SOURCE | test.py:77:10:77:18 | ControlFlowNode for Attribute | Flow found | +| test.py:82:10:82:16 | ControlFlowNode for Attribute | test.py:3:1:3:6 | ControlFlowNode for SOURCE | test.py:82:10:82:16 | ControlFlowNode for Attribute | Flow found | | test.py:82:10:82:16 | ControlFlowNode for Attribute | test.py:3:10:3:17 | ControlFlowNode for Str | test.py:82:10:82:16 | ControlFlowNode for Attribute | Flow found | | test.py:82:10:82:16 | ControlFlowNode for Attribute | test.py:81:17:81:22 | ControlFlowNode for SOURCE | test.py:82:10:82:16 | ControlFlowNode for Attribute | Flow found | +| test.py:87:10:87:16 | ControlFlowNode for Attribute | test.py:3:1:3:6 | ControlFlowNode for SOURCE | test.py:87:10:87:16 | ControlFlowNode for Attribute | Flow found | | test.py:87:10:87:16 | ControlFlowNode for Attribute | test.py:3:10:3:17 | ControlFlowNode for Str | test.py:87:10:87:16 | ControlFlowNode for Attribute | Flow found | | test.py:87:10:87:16 | ControlFlowNode for Attribute | test.py:86:21:86:26 | ControlFlowNode for SOURCE | test.py:87:10:87:16 | ControlFlowNode for Attribute | Flow found | +| test.py:97:10:97:39 | ControlFlowNode for fields_with_local_flow() | test.py:3:1:3:6 | ControlFlowNode for SOURCE | test.py:97:10:97:39 | ControlFlowNode for fields_with_local_flow() | Flow found | | test.py:97:10:97:39 | ControlFlowNode for fields_with_local_flow() | test.py:3:10:3:17 | ControlFlowNode for Str | test.py:97:10:97:39 | ControlFlowNode for fields_with_local_flow() | Flow found | | test.py:97:10:97:39 | ControlFlowNode for fields_with_local_flow() | test.py:97:33:97:38 | ControlFlowNode for SOURCE | test.py:97:10:97:39 | ControlFlowNode for fields_with_local_flow() | Flow found | diff --git a/python/ql/test/experimental/dataflow/fieldflow/globalStep.expected b/python/ql/test/experimental/dataflow/fieldflow/globalStep.expected index 1dde97a8d04e..c32d469dfd1e 100644 --- a/python/ql/test/experimental/dataflow/fieldflow/globalStep.expected +++ b/python/ql/test/experimental/dataflow/fieldflow/globalStep.expected @@ -10,12 +10,16 @@ | examples.py:0:0:0:0 | GSSA Variable SINK | examples.py:59:1:59:4 | ControlFlowNode for SINK | | examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | | examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | +| examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:31:1:31:1 | ControlFlowNode for x | +| examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:31:1:31:1 | ControlFlowNode for x | | examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:31:1:31:1 | GSSA Variable x | | examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:31:1:31:1 | GSSA Variable x | | examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | | examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | | examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:35:13:35:13 | ControlFlowNode for x | | examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:35:13:35:13 | ControlFlowNode for x | +| examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:40:1:40:1 | ControlFlowNode for x | +| examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:40:1:40:1 | ControlFlowNode for x | | examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:40:1:40:1 | GSSA Variable x | | examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:40:1:40:1 | GSSA Variable x | | examples.py:0:0:0:0 | GSSA Variable SOURCE | examples.py:40:5:40:10 | ControlFlowNode for SOURCE | @@ -36,12 +40,20 @@ | examples.py:0:0:0:0 | ModuleVariableNode for Global Variable MyObj in Module examples | examples.py:54:11:54:15 | ControlFlowNode for MyObj | | examples.py:0:0:0:0 | ModuleVariableNode for Global Variable SINK_F in Module examples | examples.py:21:5:21:10 | ControlFlowNode for SINK_F | | examples.py:0:0:0:0 | ModuleVariableNode for Global Variable SINK_F in Module examples | examples.py:21:5:21:10 | ControlFlowNode for SINK_F | +| examples.py:6:1:6:20 | ControlFlowNode for ClassExpr | examples.py:6:7:6:11 | ControlFlowNode for MyObj | +| examples.py:6:1:6:20 | ControlFlowNode for ClassExpr | examples.py:6:7:6:11 | ControlFlowNode for MyObj | | examples.py:6:1:6:20 | ControlFlowNode for ClassExpr | examples.py:6:7:6:11 | GSSA Variable MyObj | | examples.py:6:1:6:20 | ControlFlowNode for ClassExpr | examples.py:6:7:6:11 | GSSA Variable MyObj | | examples.py:6:1:6:20 | ControlFlowNode for ClassExpr | examples.py:25:9:25:13 | ControlFlowNode for MyObj | | examples.py:6:1:6:20 | ControlFlowNode for ClassExpr | examples.py:25:9:25:13 | ControlFlowNode for MyObj | | examples.py:6:1:6:20 | ControlFlowNode for ClassExpr | examples.py:49:7:49:11 | ControlFlowNode for MyObj | | examples.py:6:1:6:20 | ControlFlowNode for ClassExpr | examples.py:49:7:49:11 | ControlFlowNode for MyObj | +| examples.py:6:7:6:11 | ControlFlowNode for MyObj | examples.py:6:7:6:11 | GSSA Variable MyObj | +| examples.py:6:7:6:11 | ControlFlowNode for MyObj | examples.py:6:7:6:11 | GSSA Variable MyObj | +| examples.py:6:7:6:11 | ControlFlowNode for MyObj | examples.py:25:9:25:13 | ControlFlowNode for MyObj | +| examples.py:6:7:6:11 | ControlFlowNode for MyObj | examples.py:25:9:25:13 | ControlFlowNode for MyObj | +| examples.py:6:7:6:11 | ControlFlowNode for MyObj | examples.py:49:7:49:11 | ControlFlowNode for MyObj | +| examples.py:6:7:6:11 | ControlFlowNode for MyObj | examples.py:49:7:49:11 | ControlFlowNode for MyObj | | examples.py:6:7:6:11 | GSSA Variable MyObj | examples.py:0:0:0:0 | ModuleVariableNode for Global Variable MyObj in Module examples | | examples.py:6:7:6:11 | GSSA Variable MyObj | examples.py:0:0:0:0 | ModuleVariableNode for Global Variable MyObj in Module examples | | examples.py:6:7:6:11 | GSSA Variable MyObj | examples.py:25:9:25:13 | ControlFlowNode for MyObj | @@ -50,32 +62,20 @@ | examples.py:6:7:6:11 | GSSA Variable MyObj | examples.py:49:7:49:11 | ControlFlowNode for MyObj | | examples.py:6:13:6:18 | ControlFlowNode for object | examples.py:11:17:11:22 | ControlFlowNode for object | | examples.py:6:13:6:18 | ControlFlowNode for object | examples.py:11:17:11:22 | ControlFlowNode for object | -| examples.py:7:5:7:28 | ControlFlowNode for FunctionExpr | examples.py:7:9:7:16 | SSA variable __init__ | -| examples.py:7:5:7:28 | ControlFlowNode for FunctionExpr | examples.py:7:9:7:16 | SSA variable __init__ | -| examples.py:7:18:7:21 | ControlFlowNode for self | examples.py:7:18:7:21 | SSA variable self | -| examples.py:7:18:7:21 | ControlFlowNode for self | examples.py:7:18:7:21 | SSA variable self | -| examples.py:7:18:7:21 | ControlFlowNode for self | examples.py:7:18:7:21 | SSA variable self | -| examples.py:7:18:7:21 | ControlFlowNode for self | examples.py:7:18:7:21 | SSA variable self | +| examples.py:7:5:7:28 | ControlFlowNode for FunctionExpr | examples.py:7:9:7:16 | ControlFlowNode for __init__ | +| examples.py:7:5:7:28 | ControlFlowNode for FunctionExpr | examples.py:7:9:7:16 | ControlFlowNode for __init__ | | examples.py:7:18:7:21 | ControlFlowNode for self | examples.py:8:9:8:12 | ControlFlowNode for self | | examples.py:7:18:7:21 | ControlFlowNode for self | examples.py:8:9:8:12 | ControlFlowNode for self | | examples.py:7:18:7:21 | ControlFlowNode for self | examples.py:8:9:8:12 | ControlFlowNode for self | | examples.py:7:18:7:21 | ControlFlowNode for self | examples.py:8:9:8:12 | ControlFlowNode for self | | examples.py:7:18:7:21 | SSA variable self | examples.py:8:9:8:12 | ControlFlowNode for self | | examples.py:7:18:7:21 | SSA variable self | examples.py:8:9:8:12 | ControlFlowNode for self | -| examples.py:7:18:7:21 | SSA variable self | examples.py:8:9:8:12 | ControlFlowNode for self | -| examples.py:7:18:7:21 | SSA variable self | examples.py:8:9:8:12 | ControlFlowNode for self | -| examples.py:7:24:7:26 | ControlFlowNode for foo | examples.py:7:24:7:26 | SSA variable foo | -| examples.py:7:24:7:26 | ControlFlowNode for foo | examples.py:7:24:7:26 | SSA variable foo | -| examples.py:7:24:7:26 | ControlFlowNode for foo | examples.py:7:24:7:26 | SSA variable foo | -| examples.py:7:24:7:26 | ControlFlowNode for foo | examples.py:7:24:7:26 | SSA variable foo | | examples.py:7:24:7:26 | ControlFlowNode for foo | examples.py:8:20:8:22 | ControlFlowNode for foo | | examples.py:7:24:7:26 | ControlFlowNode for foo | examples.py:8:20:8:22 | ControlFlowNode for foo | | examples.py:7:24:7:26 | ControlFlowNode for foo | examples.py:8:20:8:22 | ControlFlowNode for foo | | examples.py:7:24:7:26 | ControlFlowNode for foo | examples.py:8:20:8:22 | ControlFlowNode for foo | | examples.py:7:24:7:26 | SSA variable foo | examples.py:8:20:8:22 | ControlFlowNode for foo | | examples.py:7:24:7:26 | SSA variable foo | examples.py:8:20:8:22 | ControlFlowNode for foo | -| examples.py:7:24:7:26 | SSA variable foo | examples.py:8:20:8:22 | ControlFlowNode for foo | -| examples.py:7:24:7:26 | SSA variable foo | examples.py:8:20:8:22 | ControlFlowNode for foo | | examples.py:8:9:8:12 | [post store] ControlFlowNode for self | examples.py:13:20:13:30 | ControlFlowNode for MyObj() | | examples.py:8:9:8:12 | [post store] ControlFlowNode for self | examples.py:13:20:13:30 | ControlFlowNode for MyObj() | | examples.py:8:9:8:12 | [post store] ControlFlowNode for self | examples.py:25:9:25:19 | ControlFlowNode for MyObj() | @@ -90,32 +90,34 @@ | examples.py:8:9:8:12 | [post store] ControlFlowNode for self [Attribute foo] | examples.py:54:11:54:18 | ControlFlowNode for MyObj() [Attribute foo] | | examples.py:8:20:8:22 | ControlFlowNode for foo | examples.py:8:9:8:12 | [post store] ControlFlowNode for self [Attribute foo] | | examples.py:8:20:8:22 | ControlFlowNode for foo | examples.py:8:9:8:12 | [post store] ControlFlowNode for self [Attribute foo] | +| examples.py:11:1:11:24 | ControlFlowNode for ClassExpr | examples.py:11:7:11:15 | ControlFlowNode for NestedObj | +| examples.py:11:1:11:24 | ControlFlowNode for ClassExpr | examples.py:11:7:11:15 | ControlFlowNode for NestedObj | | examples.py:11:1:11:24 | ControlFlowNode for ClassExpr | examples.py:11:7:11:15 | GSSA Variable NestedObj | | examples.py:11:1:11:24 | ControlFlowNode for ClassExpr | examples.py:11:7:11:15 | GSSA Variable NestedObj | | examples.py:11:1:11:24 | ControlFlowNode for ClassExpr | examples.py:33:5:33:13 | ControlFlowNode for NestedObj | | examples.py:11:1:11:24 | ControlFlowNode for ClassExpr | examples.py:33:5:33:13 | ControlFlowNode for NestedObj | | examples.py:11:1:11:24 | ControlFlowNode for ClassExpr | examples.py:42:5:42:13 | ControlFlowNode for NestedObj | | examples.py:11:1:11:24 | ControlFlowNode for ClassExpr | examples.py:42:5:42:13 | ControlFlowNode for NestedObj | +| examples.py:11:7:11:15 | ControlFlowNode for NestedObj | examples.py:11:7:11:15 | GSSA Variable NestedObj | +| examples.py:11:7:11:15 | ControlFlowNode for NestedObj | examples.py:11:7:11:15 | GSSA Variable NestedObj | +| examples.py:11:7:11:15 | ControlFlowNode for NestedObj | examples.py:33:5:33:13 | ControlFlowNode for NestedObj | +| examples.py:11:7:11:15 | ControlFlowNode for NestedObj | examples.py:33:5:33:13 | ControlFlowNode for NestedObj | +| examples.py:11:7:11:15 | ControlFlowNode for NestedObj | examples.py:42:5:42:13 | ControlFlowNode for NestedObj | +| examples.py:11:7:11:15 | ControlFlowNode for NestedObj | examples.py:42:5:42:13 | ControlFlowNode for NestedObj | | examples.py:11:7:11:15 | GSSA Variable NestedObj | examples.py:33:5:33:13 | ControlFlowNode for NestedObj | | examples.py:11:7:11:15 | GSSA Variable NestedObj | examples.py:33:5:33:13 | ControlFlowNode for NestedObj | | examples.py:11:7:11:15 | GSSA Variable NestedObj | examples.py:42:5:42:13 | ControlFlowNode for NestedObj | | examples.py:11:7:11:15 | GSSA Variable NestedObj | examples.py:42:5:42:13 | ControlFlowNode for NestedObj | -| examples.py:12:5:12:23 | ControlFlowNode for FunctionExpr | examples.py:12:9:12:16 | SSA variable __init__ | -| examples.py:12:5:12:23 | ControlFlowNode for FunctionExpr | examples.py:12:9:12:16 | SSA variable __init__ | +| examples.py:12:5:12:23 | ControlFlowNode for FunctionExpr | examples.py:12:9:12:16 | ControlFlowNode for __init__ | +| examples.py:12:5:12:23 | ControlFlowNode for FunctionExpr | examples.py:12:9:12:16 | ControlFlowNode for __init__ | | examples.py:12:5:12:23 | GSSA Variable MyObj | examples.py:13:20:13:24 | ControlFlowNode for MyObj | | examples.py:12:5:12:23 | GSSA Variable MyObj | examples.py:13:20:13:24 | ControlFlowNode for MyObj | -| examples.py:12:18:12:21 | ControlFlowNode for self | examples.py:12:18:12:21 | SSA variable self | -| examples.py:12:18:12:21 | ControlFlowNode for self | examples.py:12:18:12:21 | SSA variable self | -| examples.py:12:18:12:21 | ControlFlowNode for self | examples.py:12:18:12:21 | SSA variable self | -| examples.py:12:18:12:21 | ControlFlowNode for self | examples.py:12:18:12:21 | SSA variable self | | examples.py:12:18:12:21 | ControlFlowNode for self | examples.py:13:9:13:12 | ControlFlowNode for self | | examples.py:12:18:12:21 | ControlFlowNode for self | examples.py:13:9:13:12 | ControlFlowNode for self | | examples.py:12:18:12:21 | ControlFlowNode for self | examples.py:13:9:13:12 | ControlFlowNode for self | | examples.py:12:18:12:21 | ControlFlowNode for self | examples.py:13:9:13:12 | ControlFlowNode for self | | examples.py:12:18:12:21 | SSA variable self | examples.py:13:9:13:12 | ControlFlowNode for self | | examples.py:12:18:12:21 | SSA variable self | examples.py:13:9:13:12 | ControlFlowNode for self | -| examples.py:12:18:12:21 | SSA variable self | examples.py:13:9:13:12 | ControlFlowNode for self | -| examples.py:12:18:12:21 | SSA variable self | examples.py:13:9:13:12 | ControlFlowNode for self | | examples.py:13:9:13:12 | [post store] ControlFlowNode for self | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() | | examples.py:13:9:13:12 | [post store] ControlFlowNode for self | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() | | examples.py:13:9:13:12 | [post store] ControlFlowNode for self | examples.py:42:5:42:15 | ControlFlowNode for NestedObj() | @@ -131,26 +133,26 @@ | examples.py:13:26:13:29 | ControlFlowNode for Str | examples.py:7:24:7:26 | ControlFlowNode for foo | | examples.py:13:26:13:29 | ControlFlowNode for Str | examples.py:7:24:7:26 | ControlFlowNode for foo | | examples.py:13:26:13:29 | ControlFlowNode for Str | examples.py:13:20:13:30 | ControlFlowNode for MyObj() [Attribute foo] | -| examples.py:15:5:15:21 | ControlFlowNode for FunctionExpr | examples.py:15:9:15:14 | SSA variable getObj | -| examples.py:15:5:15:21 | ControlFlowNode for FunctionExpr | examples.py:15:9:15:14 | SSA variable getObj | -| examples.py:15:16:15:19 | ControlFlowNode for self | examples.py:15:16:15:19 | SSA variable self | -| examples.py:15:16:15:19 | ControlFlowNode for self | examples.py:15:16:15:19 | SSA variable self | +| examples.py:15:5:15:21 | ControlFlowNode for FunctionExpr | examples.py:15:9:15:14 | ControlFlowNode for getObj | +| examples.py:15:5:15:21 | ControlFlowNode for FunctionExpr | examples.py:15:9:15:14 | ControlFlowNode for getObj | | examples.py:15:16:15:19 | ControlFlowNode for self | examples.py:16:16:16:19 | ControlFlowNode for self | | examples.py:15:16:15:19 | ControlFlowNode for self | examples.py:16:16:16:19 | ControlFlowNode for self | | examples.py:15:16:15:19 | SSA variable self | examples.py:16:16:16:19 | ControlFlowNode for self | | examples.py:15:16:15:19 | SSA variable self | examples.py:16:16:16:19 | ControlFlowNode for self | +| examples.py:20:1:20:19 | ControlFlowNode for FunctionExpr | examples.py:20:5:20:10 | ControlFlowNode for setFoo | +| examples.py:20:1:20:19 | ControlFlowNode for FunctionExpr | examples.py:20:5:20:10 | ControlFlowNode for setFoo | | examples.py:20:1:20:19 | ControlFlowNode for FunctionExpr | examples.py:20:5:20:10 | GSSA Variable setFoo | | examples.py:20:1:20:19 | ControlFlowNode for FunctionExpr | examples.py:20:5:20:10 | GSSA Variable setFoo | | examples.py:20:1:20:19 | ControlFlowNode for FunctionExpr | examples.py:27:1:27:6 | ControlFlowNode for setFoo | | examples.py:20:1:20:19 | ControlFlowNode for FunctionExpr | examples.py:27:1:27:6 | ControlFlowNode for setFoo | | examples.py:20:1:20:19 | GSSA Variable SINK_F | examples.py:21:5:21:10 | ControlFlowNode for SINK_F | | examples.py:20:1:20:19 | GSSA Variable SINK_F | examples.py:21:5:21:10 | ControlFlowNode for SINK_F | +| examples.py:20:5:20:10 | ControlFlowNode for setFoo | examples.py:20:5:20:10 | GSSA Variable setFoo | +| examples.py:20:5:20:10 | ControlFlowNode for setFoo | examples.py:20:5:20:10 | GSSA Variable setFoo | +| examples.py:20:5:20:10 | ControlFlowNode for setFoo | examples.py:27:1:27:6 | ControlFlowNode for setFoo | +| examples.py:20:5:20:10 | ControlFlowNode for setFoo | examples.py:27:1:27:6 | ControlFlowNode for setFoo | | examples.py:20:5:20:10 | GSSA Variable setFoo | examples.py:27:1:27:6 | ControlFlowNode for setFoo | | examples.py:20:5:20:10 | GSSA Variable setFoo | examples.py:27:1:27:6 | ControlFlowNode for setFoo | -| examples.py:20:12:20:14 | ControlFlowNode for obj | examples.py:20:12:20:14 | SSA variable obj | -| examples.py:20:12:20:14 | ControlFlowNode for obj | examples.py:20:12:20:14 | SSA variable obj | -| examples.py:20:12:20:14 | ControlFlowNode for obj | examples.py:20:12:20:14 | SSA variable obj | -| examples.py:20:12:20:14 | ControlFlowNode for obj | examples.py:20:12:20:14 | SSA variable obj | | examples.py:20:12:20:14 | ControlFlowNode for obj | examples.py:21:12:21:14 | ControlFlowNode for obj | | examples.py:20:12:20:14 | ControlFlowNode for obj | examples.py:21:12:21:14 | ControlFlowNode for obj | | examples.py:20:12:20:14 | ControlFlowNode for obj | examples.py:21:12:21:14 | ControlFlowNode for obj | @@ -159,29 +161,17 @@ | examples.py:20:12:20:14 | ControlFlowNode for obj | examples.py:22:5:22:7 | ControlFlowNode for obj | | examples.py:20:12:20:14 | ControlFlowNode for obj | examples.py:22:5:22:7 | ControlFlowNode for obj | | examples.py:20:12:20:14 | ControlFlowNode for obj | examples.py:22:5:22:7 | ControlFlowNode for obj | -| examples.py:20:12:20:14 | ControlFlowNode for obj [Attribute foo] | examples.py:20:12:20:14 | SSA variable obj [Attribute foo] | | examples.py:20:12:20:14 | ControlFlowNode for obj [Attribute foo] | examples.py:21:12:21:14 | ControlFlowNode for obj [Attribute foo] | | examples.py:20:12:20:14 | SSA variable obj | examples.py:21:12:21:14 | ControlFlowNode for obj | | examples.py:20:12:20:14 | SSA variable obj | examples.py:21:12:21:14 | ControlFlowNode for obj | -| examples.py:20:12:20:14 | SSA variable obj | examples.py:21:12:21:14 | ControlFlowNode for obj | -| examples.py:20:12:20:14 | SSA variable obj | examples.py:21:12:21:14 | ControlFlowNode for obj | -| examples.py:20:12:20:14 | SSA variable obj | examples.py:22:5:22:7 | ControlFlowNode for obj | | examples.py:20:12:20:14 | SSA variable obj | examples.py:22:5:22:7 | ControlFlowNode for obj | | examples.py:20:12:20:14 | SSA variable obj | examples.py:22:5:22:7 | ControlFlowNode for obj | -| examples.py:20:12:20:14 | SSA variable obj | examples.py:22:5:22:7 | ControlFlowNode for obj | -| examples.py:20:12:20:14 | SSA variable obj [Attribute foo] | examples.py:21:12:21:14 | ControlFlowNode for obj [Attribute foo] | -| examples.py:20:17:20:17 | ControlFlowNode for x | examples.py:20:17:20:17 | SSA variable x | -| examples.py:20:17:20:17 | ControlFlowNode for x | examples.py:20:17:20:17 | SSA variable x | -| examples.py:20:17:20:17 | ControlFlowNode for x | examples.py:20:17:20:17 | SSA variable x | -| examples.py:20:17:20:17 | ControlFlowNode for x | examples.py:20:17:20:17 | SSA variable x | | examples.py:20:17:20:17 | ControlFlowNode for x | examples.py:22:15:22:15 | ControlFlowNode for x | | examples.py:20:17:20:17 | ControlFlowNode for x | examples.py:22:15:22:15 | ControlFlowNode for x | | examples.py:20:17:20:17 | ControlFlowNode for x | examples.py:22:15:22:15 | ControlFlowNode for x | | examples.py:20:17:20:17 | ControlFlowNode for x | examples.py:22:15:22:15 | ControlFlowNode for x | | examples.py:20:17:20:17 | SSA variable x | examples.py:22:15:22:15 | ControlFlowNode for x | | examples.py:20:17:20:17 | SSA variable x | examples.py:22:15:22:15 | ControlFlowNode for x | -| examples.py:20:17:20:17 | SSA variable x | examples.py:22:15:22:15 | ControlFlowNode for x | -| examples.py:20:17:20:17 | SSA variable x | examples.py:22:15:22:15 | ControlFlowNode for x | | examples.py:21:12:21:14 | ControlFlowNode for obj | examples.py:22:5:22:7 | ControlFlowNode for obj | | examples.py:21:12:21:14 | ControlFlowNode for obj | examples.py:22:5:22:7 | ControlFlowNode for obj | | examples.py:21:12:21:14 | ControlFlowNode for obj | examples.py:22:5:22:7 | ControlFlowNode for obj | @@ -197,6 +187,15 @@ | examples.py:22:5:22:7 | [post store] ControlFlowNode for obj [Attribute foo] | examples.py:27:8:27:12 | [post arg] ControlFlowNode for myobj [Attribute foo] | | examples.py:22:15:22:15 | ControlFlowNode for x | examples.py:22:5:22:7 | [post store] ControlFlowNode for obj [Attribute foo] | | examples.py:22:15:22:15 | ControlFlowNode for x | examples.py:22:5:22:7 | [post store] ControlFlowNode for obj [Attribute foo] | +| examples.py:25:1:25:5 | ControlFlowNode for myobj | examples.py:25:1:25:5 | GSSA Variable myobj | +| examples.py:25:1:25:5 | ControlFlowNode for myobj | examples.py:25:1:25:5 | GSSA Variable myobj | +| examples.py:25:1:25:5 | ControlFlowNode for myobj | examples.py:27:8:27:12 | ControlFlowNode for myobj | +| examples.py:25:1:25:5 | ControlFlowNode for myobj | examples.py:27:8:27:12 | ControlFlowNode for myobj | +| examples.py:25:1:25:5 | ControlFlowNode for myobj | examples.py:28:6:28:10 | ControlFlowNode for myobj | +| examples.py:25:1:25:5 | ControlFlowNode for myobj | examples.py:28:6:28:10 | ControlFlowNode for myobj | +| examples.py:25:1:25:5 | ControlFlowNode for myobj [Attribute foo] | examples.py:25:1:25:5 | GSSA Variable myobj [Attribute foo] | +| examples.py:25:1:25:5 | ControlFlowNode for myobj [Attribute foo] | examples.py:27:8:27:12 | ControlFlowNode for myobj [Attribute foo] | +| examples.py:25:1:25:5 | ControlFlowNode for myobj [Attribute foo] | examples.py:28:6:28:10 | ControlFlowNode for myobj [Attribute foo] | | examples.py:25:1:25:5 | GSSA Variable myobj | examples.py:27:8:27:12 | ControlFlowNode for myobj | | examples.py:25:1:25:5 | GSSA Variable myobj | examples.py:27:8:27:12 | ControlFlowNode for myobj | | examples.py:25:1:25:5 | GSSA Variable myobj | examples.py:28:6:28:10 | ControlFlowNode for myobj | @@ -205,12 +204,15 @@ | examples.py:25:1:25:5 | GSSA Variable myobj [Attribute foo] | examples.py:28:6:28:10 | ControlFlowNode for myobj [Attribute foo] | | examples.py:25:9:25:13 | ControlFlowNode for MyObj | examples.py:49:7:49:11 | ControlFlowNode for MyObj | | examples.py:25:9:25:13 | ControlFlowNode for MyObj | examples.py:49:7:49:11 | ControlFlowNode for MyObj | +| examples.py:25:9:25:19 | ControlFlowNode for MyObj() | examples.py:25:1:25:5 | ControlFlowNode for myobj | +| examples.py:25:9:25:19 | ControlFlowNode for MyObj() | examples.py:25:1:25:5 | ControlFlowNode for myobj | | examples.py:25:9:25:19 | ControlFlowNode for MyObj() | examples.py:25:1:25:5 | GSSA Variable myobj | | examples.py:25:9:25:19 | ControlFlowNode for MyObj() | examples.py:25:1:25:5 | GSSA Variable myobj | | examples.py:25:9:25:19 | ControlFlowNode for MyObj() | examples.py:27:8:27:12 | ControlFlowNode for myobj | | examples.py:25:9:25:19 | ControlFlowNode for MyObj() | examples.py:27:8:27:12 | ControlFlowNode for myobj | | examples.py:25:9:25:19 | ControlFlowNode for MyObj() | examples.py:28:6:28:10 | ControlFlowNode for myobj | | examples.py:25:9:25:19 | ControlFlowNode for MyObj() | examples.py:28:6:28:10 | ControlFlowNode for myobj | +| examples.py:25:9:25:19 | ControlFlowNode for MyObj() [Attribute foo] | examples.py:25:1:25:5 | ControlFlowNode for myobj [Attribute foo] | | examples.py:25:9:25:19 | ControlFlowNode for MyObj() [Attribute foo] | examples.py:25:1:25:5 | GSSA Variable myobj [Attribute foo] | | examples.py:25:9:25:19 | ControlFlowNode for MyObj() [Attribute foo] | examples.py:27:8:27:12 | ControlFlowNode for myobj [Attribute foo] | | examples.py:25:9:25:19 | ControlFlowNode for MyObj() [Attribute foo] | examples.py:28:6:28:10 | ControlFlowNode for myobj [Attribute foo] | @@ -231,12 +233,16 @@ | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:20:17:20:17 | ControlFlowNode for x | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:20:17:20:17 | ControlFlowNode for x | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:27:8:27:12 | [post arg] ControlFlowNode for myobj [Attribute foo] | +| examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:31:1:31:1 | ControlFlowNode for x | +| examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:31:1:31:1 | ControlFlowNode for x | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:31:1:31:1 | GSSA Variable x | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:31:1:31:1 | GSSA Variable x | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:35:13:35:13 | ControlFlowNode for x | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:35:13:35:13 | ControlFlowNode for x | +| examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | ControlFlowNode for x | +| examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | ControlFlowNode for x | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | GSSA Variable x | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | GSSA Variable x | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:40:5:40:10 | ControlFlowNode for SOURCE | @@ -247,12 +253,16 @@ | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:49:13:49:18 | ControlFlowNode for SOURCE | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:59:29:59:34 | ControlFlowNode for SOURCE | | examples.py:27:15:27:20 | ControlFlowNode for SOURCE | examples.py:59:29:59:34 | ControlFlowNode for SOURCE | +| examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:31:1:31:1 | ControlFlowNode for x | +| examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:31:1:31:1 | ControlFlowNode for x | | examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:31:1:31:1 | GSSA Variable x | | examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:31:1:31:1 | GSSA Variable x | | examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | | examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | | examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:35:13:35:13 | ControlFlowNode for x | | examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:35:13:35:13 | ControlFlowNode for x | +| examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:40:1:40:1 | ControlFlowNode for x | +| examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:40:1:40:1 | ControlFlowNode for x | | examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:40:1:40:1 | GSSA Variable x | | examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:40:1:40:1 | GSSA Variable x | | examples.py:27:15:27:20 | [post arg] ControlFlowNode for SOURCE | examples.py:40:5:40:10 | ControlFlowNode for SOURCE | @@ -273,12 +283,20 @@ | examples.py:28:1:28:4 | ControlFlowNode for SINK | examples.py:59:1:59:4 | ControlFlowNode for SINK | | examples.py:28:6:28:10 | ControlFlowNode for myobj [Attribute foo] | examples.py:28:6:28:14 | ControlFlowNode for Attribute | | examples.py:28:6:28:10 | ControlFlowNode for myobj [Attribute foo] | examples.py:28:6:28:14 | ControlFlowNode for Attribute | +| examples.py:31:1:31:1 | ControlFlowNode for x | examples.py:31:1:31:1 | GSSA Variable x | +| examples.py:31:1:31:1 | ControlFlowNode for x | examples.py:31:1:31:1 | GSSA Variable x | +| examples.py:31:1:31:1 | ControlFlowNode for x | examples.py:35:13:35:13 | ControlFlowNode for x | +| examples.py:31:1:31:1 | ControlFlowNode for x | examples.py:35:13:35:13 | ControlFlowNode for x | | examples.py:31:1:31:1 | GSSA Variable x | examples.py:35:13:35:13 | ControlFlowNode for x | | examples.py:31:1:31:1 | GSSA Variable x | examples.py:35:13:35:13 | ControlFlowNode for x | +| examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:31:1:31:1 | ControlFlowNode for x | +| examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:31:1:31:1 | ControlFlowNode for x | | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:31:1:31:1 | GSSA Variable x | | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:31:1:31:1 | GSSA Variable x | | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:35:13:35:13 | ControlFlowNode for x | | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:35:13:35:13 | ControlFlowNode for x | +| examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | ControlFlowNode for x | +| examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | ControlFlowNode for x | | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | GSSA Variable x | | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | GSSA Variable x | | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:40:5:40:10 | ControlFlowNode for SOURCE | @@ -289,6 +307,18 @@ | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:49:13:49:18 | ControlFlowNode for SOURCE | | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:59:29:59:34 | ControlFlowNode for SOURCE | | examples.py:31:5:31:10 | ControlFlowNode for SOURCE | examples.py:59:29:59:34 | ControlFlowNode for SOURCE | +| examples.py:33:1:33:1 | ControlFlowNode for a | examples.py:33:1:33:1 | GSSA Variable a | +| examples.py:33:1:33:1 | ControlFlowNode for a | examples.py:33:1:33:1 | GSSA Variable a | +| examples.py:33:1:33:1 | ControlFlowNode for a | examples.py:35:1:35:1 | ControlFlowNode for a | +| examples.py:33:1:33:1 | ControlFlowNode for a | examples.py:35:1:35:1 | ControlFlowNode for a | +| examples.py:33:1:33:1 | ControlFlowNode for a | examples.py:37:6:37:6 | ControlFlowNode for a | +| examples.py:33:1:33:1 | ControlFlowNode for a | examples.py:37:6:37:6 | ControlFlowNode for a | +| examples.py:33:1:33:1 | ControlFlowNode for a [Attribute obj, Attribute foo] | examples.py:33:1:33:1 | GSSA Variable a [Attribute obj, Attribute foo] | +| examples.py:33:1:33:1 | ControlFlowNode for a [Attribute obj, Attribute foo] | examples.py:35:1:35:1 | ControlFlowNode for a [Attribute obj, Attribute foo] | +| examples.py:33:1:33:1 | ControlFlowNode for a [Attribute obj, Attribute foo] | examples.py:37:6:37:6 | ControlFlowNode for a [Attribute obj, Attribute foo] | +| examples.py:33:1:33:1 | ControlFlowNode for a [Attribute obj] | examples.py:33:1:33:1 | GSSA Variable a [Attribute obj] | +| examples.py:33:1:33:1 | ControlFlowNode for a [Attribute obj] | examples.py:35:1:35:1 | ControlFlowNode for a [Attribute obj] | +| examples.py:33:1:33:1 | ControlFlowNode for a [Attribute obj] | examples.py:37:6:37:6 | ControlFlowNode for a [Attribute obj] | | examples.py:33:1:33:1 | GSSA Variable a | examples.py:35:1:35:1 | ControlFlowNode for a | | examples.py:33:1:33:1 | GSSA Variable a | examples.py:35:1:35:1 | ControlFlowNode for a | | examples.py:33:1:33:1 | GSSA Variable a | examples.py:37:6:37:6 | ControlFlowNode for a | @@ -299,15 +329,19 @@ | examples.py:33:1:33:1 | GSSA Variable a [Attribute obj] | examples.py:37:6:37:6 | ControlFlowNode for a [Attribute obj] | | examples.py:33:5:33:13 | ControlFlowNode for NestedObj | examples.py:42:5:42:13 | ControlFlowNode for NestedObj | | examples.py:33:5:33:13 | ControlFlowNode for NestedObj | examples.py:42:5:42:13 | ControlFlowNode for NestedObj | +| examples.py:33:5:33:15 | ControlFlowNode for NestedObj() | examples.py:33:1:33:1 | ControlFlowNode for a | +| examples.py:33:5:33:15 | ControlFlowNode for NestedObj() | examples.py:33:1:33:1 | ControlFlowNode for a | | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() | examples.py:33:1:33:1 | GSSA Variable a | | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() | examples.py:33:1:33:1 | GSSA Variable a | | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() | examples.py:35:1:35:1 | ControlFlowNode for a | | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() | examples.py:35:1:35:1 | ControlFlowNode for a | | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() | examples.py:37:6:37:6 | ControlFlowNode for a | | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() | examples.py:37:6:37:6 | ControlFlowNode for a | +| examples.py:33:5:33:15 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | examples.py:33:1:33:1 | ControlFlowNode for a [Attribute obj, Attribute foo] | | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | examples.py:33:1:33:1 | GSSA Variable a [Attribute obj, Attribute foo] | | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | examples.py:35:1:35:1 | ControlFlowNode for a [Attribute obj, Attribute foo] | | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | examples.py:37:6:37:6 | ControlFlowNode for a [Attribute obj, Attribute foo] | +| examples.py:33:5:33:15 | ControlFlowNode for NestedObj() [Attribute obj] | examples.py:33:1:33:1 | ControlFlowNode for a [Attribute obj] | | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() [Attribute obj] | examples.py:33:1:33:1 | GSSA Variable a [Attribute obj] | | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() [Attribute obj] | examples.py:35:1:35:1 | ControlFlowNode for a [Attribute obj] | | examples.py:33:5:33:15 | ControlFlowNode for NestedObj() [Attribute obj] | examples.py:37:6:37:6 | ControlFlowNode for a [Attribute obj] | @@ -337,8 +371,14 @@ | examples.py:37:6:37:6 | ControlFlowNode for a [Attribute obj] | examples.py:37:6:37:10 | ControlFlowNode for Attribute | | examples.py:37:6:37:10 | ControlFlowNode for Attribute [Attribute foo] | examples.py:37:6:37:14 | ControlFlowNode for Attribute | | examples.py:37:6:37:10 | ControlFlowNode for Attribute [Attribute foo] | examples.py:37:6:37:14 | ControlFlowNode for Attribute | +| examples.py:40:1:40:1 | ControlFlowNode for x | examples.py:40:1:40:1 | GSSA Variable x | +| examples.py:40:1:40:1 | ControlFlowNode for x | examples.py:40:1:40:1 | GSSA Variable x | +| examples.py:40:1:40:1 | ControlFlowNode for x | examples.py:44:18:44:18 | ControlFlowNode for x | +| examples.py:40:1:40:1 | ControlFlowNode for x | examples.py:44:18:44:18 | ControlFlowNode for x | | examples.py:40:1:40:1 | GSSA Variable x | examples.py:44:18:44:18 | ControlFlowNode for x | | examples.py:40:1:40:1 | GSSA Variable x | examples.py:44:18:44:18 | ControlFlowNode for x | +| examples.py:40:5:40:10 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | ControlFlowNode for x | +| examples.py:40:5:40:10 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | ControlFlowNode for x | | examples.py:40:5:40:10 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | GSSA Variable x | | examples.py:40:5:40:10 | ControlFlowNode for SOURCE | examples.py:40:1:40:1 | GSSA Variable x | | examples.py:40:5:40:10 | ControlFlowNode for SOURCE | examples.py:44:18:44:18 | ControlFlowNode for x | @@ -347,6 +387,18 @@ | examples.py:40:5:40:10 | ControlFlowNode for SOURCE | examples.py:49:13:49:18 | ControlFlowNode for SOURCE | | examples.py:40:5:40:10 | ControlFlowNode for SOURCE | examples.py:59:29:59:34 | ControlFlowNode for SOURCE | | examples.py:40:5:40:10 | ControlFlowNode for SOURCE | examples.py:59:29:59:34 | ControlFlowNode for SOURCE | +| examples.py:42:1:42:1 | ControlFlowNode for a | examples.py:42:1:42:1 | GSSA Variable a | +| examples.py:42:1:42:1 | ControlFlowNode for a | examples.py:42:1:42:1 | GSSA Variable a | +| examples.py:42:1:42:1 | ControlFlowNode for a | examples.py:44:1:44:1 | ControlFlowNode for a | +| examples.py:42:1:42:1 | ControlFlowNode for a | examples.py:44:1:44:1 | ControlFlowNode for a | +| examples.py:42:1:42:1 | ControlFlowNode for a | examples.py:46:6:46:6 | ControlFlowNode for a | +| examples.py:42:1:42:1 | ControlFlowNode for a | examples.py:46:6:46:6 | ControlFlowNode for a | +| examples.py:42:1:42:1 | ControlFlowNode for a [Attribute obj, Attribute foo] | examples.py:42:1:42:1 | GSSA Variable a [Attribute obj, Attribute foo] | +| examples.py:42:1:42:1 | ControlFlowNode for a [Attribute obj, Attribute foo] | examples.py:44:1:44:1 | ControlFlowNode for a [Attribute obj, Attribute foo] | +| examples.py:42:1:42:1 | ControlFlowNode for a [Attribute obj, Attribute foo] | examples.py:46:6:46:6 | ControlFlowNode for a [Attribute obj, Attribute foo] | +| examples.py:42:1:42:1 | ControlFlowNode for a [Attribute obj] | examples.py:42:1:42:1 | GSSA Variable a [Attribute obj] | +| examples.py:42:1:42:1 | ControlFlowNode for a [Attribute obj] | examples.py:44:1:44:1 | ControlFlowNode for a [Attribute obj] | +| examples.py:42:1:42:1 | ControlFlowNode for a [Attribute obj] | examples.py:46:6:46:6 | ControlFlowNode for a [Attribute obj] | | examples.py:42:1:42:1 | GSSA Variable a | examples.py:44:1:44:1 | ControlFlowNode for a | | examples.py:42:1:42:1 | GSSA Variable a | examples.py:44:1:44:1 | ControlFlowNode for a | | examples.py:42:1:42:1 | GSSA Variable a | examples.py:46:6:46:6 | ControlFlowNode for a | @@ -355,15 +407,19 @@ | examples.py:42:1:42:1 | GSSA Variable a [Attribute obj, Attribute foo] | examples.py:46:6:46:6 | ControlFlowNode for a [Attribute obj, Attribute foo] | | examples.py:42:1:42:1 | GSSA Variable a [Attribute obj] | examples.py:44:1:44:1 | ControlFlowNode for a [Attribute obj] | | examples.py:42:1:42:1 | GSSA Variable a [Attribute obj] | examples.py:46:6:46:6 | ControlFlowNode for a [Attribute obj] | +| examples.py:42:5:42:15 | ControlFlowNode for NestedObj() | examples.py:42:1:42:1 | ControlFlowNode for a | +| examples.py:42:5:42:15 | ControlFlowNode for NestedObj() | examples.py:42:1:42:1 | ControlFlowNode for a | | examples.py:42:5:42:15 | ControlFlowNode for NestedObj() | examples.py:42:1:42:1 | GSSA Variable a | | examples.py:42:5:42:15 | ControlFlowNode for NestedObj() | examples.py:42:1:42:1 | GSSA Variable a | | examples.py:42:5:42:15 | ControlFlowNode for NestedObj() | examples.py:44:1:44:1 | ControlFlowNode for a | | examples.py:42:5:42:15 | ControlFlowNode for NestedObj() | examples.py:44:1:44:1 | ControlFlowNode for a | | examples.py:42:5:42:15 | ControlFlowNode for NestedObj() | examples.py:46:6:46:6 | ControlFlowNode for a | | examples.py:42:5:42:15 | ControlFlowNode for NestedObj() | examples.py:46:6:46:6 | ControlFlowNode for a | +| examples.py:42:5:42:15 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | examples.py:42:1:42:1 | ControlFlowNode for a [Attribute obj, Attribute foo] | | examples.py:42:5:42:15 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | examples.py:42:1:42:1 | GSSA Variable a [Attribute obj, Attribute foo] | | examples.py:42:5:42:15 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | examples.py:44:1:44:1 | ControlFlowNode for a [Attribute obj, Attribute foo] | | examples.py:42:5:42:15 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | examples.py:46:6:46:6 | ControlFlowNode for a [Attribute obj, Attribute foo] | +| examples.py:42:5:42:15 | ControlFlowNode for NestedObj() [Attribute obj] | examples.py:42:1:42:1 | ControlFlowNode for a [Attribute obj] | | examples.py:42:5:42:15 | ControlFlowNode for NestedObj() [Attribute obj] | examples.py:42:1:42:1 | GSSA Variable a [Attribute obj] | | examples.py:42:5:42:15 | ControlFlowNode for NestedObj() [Attribute obj] | examples.py:44:1:44:1 | ControlFlowNode for a [Attribute obj] | | examples.py:42:5:42:15 | ControlFlowNode for NestedObj() [Attribute obj] | examples.py:46:6:46:6 | ControlFlowNode for a [Attribute obj] | @@ -384,13 +440,22 @@ | examples.py:46:6:46:6 | ControlFlowNode for a [Attribute obj] | examples.py:46:6:46:10 | ControlFlowNode for Attribute | | examples.py:46:6:46:10 | ControlFlowNode for Attribute [Attribute foo] | examples.py:46:6:46:14 | ControlFlowNode for Attribute | | examples.py:46:6:46:10 | ControlFlowNode for Attribute [Attribute foo] | examples.py:46:6:46:14 | ControlFlowNode for Attribute | +| examples.py:49:1:49:3 | ControlFlowNode for obj | examples.py:49:1:49:3 | GSSA Variable obj | +| examples.py:49:1:49:3 | ControlFlowNode for obj | examples.py:49:1:49:3 | GSSA Variable obj | +| examples.py:49:1:49:3 | ControlFlowNode for obj | examples.py:50:6:50:8 | ControlFlowNode for obj | +| examples.py:49:1:49:3 | ControlFlowNode for obj | examples.py:50:6:50:8 | ControlFlowNode for obj | +| examples.py:49:1:49:3 | ControlFlowNode for obj [Attribute foo] | examples.py:49:1:49:3 | GSSA Variable obj [Attribute foo] | +| examples.py:49:1:49:3 | ControlFlowNode for obj [Attribute foo] | examples.py:50:6:50:8 | ControlFlowNode for obj [Attribute foo] | | examples.py:49:1:49:3 | GSSA Variable obj | examples.py:50:6:50:8 | ControlFlowNode for obj | | examples.py:49:1:49:3 | GSSA Variable obj | examples.py:50:6:50:8 | ControlFlowNode for obj | | examples.py:49:1:49:3 | GSSA Variable obj [Attribute foo] | examples.py:50:6:50:8 | ControlFlowNode for obj [Attribute foo] | +| examples.py:49:7:49:19 | ControlFlowNode for MyObj() | examples.py:49:1:49:3 | ControlFlowNode for obj | +| examples.py:49:7:49:19 | ControlFlowNode for MyObj() | examples.py:49:1:49:3 | ControlFlowNode for obj | | examples.py:49:7:49:19 | ControlFlowNode for MyObj() | examples.py:49:1:49:3 | GSSA Variable obj | | examples.py:49:7:49:19 | ControlFlowNode for MyObj() | examples.py:49:1:49:3 | GSSA Variable obj | | examples.py:49:7:49:19 | ControlFlowNode for MyObj() | examples.py:50:6:50:8 | ControlFlowNode for obj | | examples.py:49:7:49:19 | ControlFlowNode for MyObj() | examples.py:50:6:50:8 | ControlFlowNode for obj | +| examples.py:49:7:49:19 | ControlFlowNode for MyObj() [Attribute foo] | examples.py:49:1:49:3 | ControlFlowNode for obj [Attribute foo] | | examples.py:49:7:49:19 | ControlFlowNode for MyObj() [Attribute foo] | examples.py:49:1:49:3 | GSSA Variable obj [Attribute foo] | | examples.py:49:7:49:19 | ControlFlowNode for MyObj() [Attribute foo] | examples.py:50:6:50:8 | ControlFlowNode for obj [Attribute foo] | | examples.py:49:7:49:19 | [pre objCreate] ControlFlowNode for MyObj() | examples.py:7:18:7:21 | ControlFlowNode for self | @@ -406,36 +471,38 @@ | examples.py:50:1:50:4 | ControlFlowNode for SINK | examples.py:59:1:59:4 | ControlFlowNode for SINK | | examples.py:50:6:50:8 | ControlFlowNode for obj [Attribute foo] | examples.py:50:6:50:12 | ControlFlowNode for Attribute | | examples.py:50:6:50:8 | ControlFlowNode for obj [Attribute foo] | examples.py:50:6:50:12 | ControlFlowNode for Attribute | +| examples.py:53:1:53:30 | ControlFlowNode for FunctionExpr | examples.py:53:5:53:26 | ControlFlowNode for fields_with_local_flow | +| examples.py:53:1:53:30 | ControlFlowNode for FunctionExpr | examples.py:53:5:53:26 | ControlFlowNode for fields_with_local_flow | | examples.py:53:1:53:30 | ControlFlowNode for FunctionExpr | examples.py:53:5:53:26 | GSSA Variable fields_with_local_flow | | examples.py:53:1:53:30 | ControlFlowNode for FunctionExpr | examples.py:53:5:53:26 | GSSA Variable fields_with_local_flow | | examples.py:53:1:53:30 | ControlFlowNode for FunctionExpr | examples.py:59:6:59:27 | ControlFlowNode for fields_with_local_flow | | examples.py:53:1:53:30 | ControlFlowNode for FunctionExpr | examples.py:59:6:59:27 | ControlFlowNode for fields_with_local_flow | | examples.py:53:1:53:30 | GSSA Variable MyObj | examples.py:54:11:54:15 | ControlFlowNode for MyObj | | examples.py:53:1:53:30 | GSSA Variable MyObj | examples.py:54:11:54:15 | ControlFlowNode for MyObj | +| examples.py:53:5:53:26 | ControlFlowNode for fields_with_local_flow | examples.py:53:5:53:26 | GSSA Variable fields_with_local_flow | +| examples.py:53:5:53:26 | ControlFlowNode for fields_with_local_flow | examples.py:53:5:53:26 | GSSA Variable fields_with_local_flow | +| examples.py:53:5:53:26 | ControlFlowNode for fields_with_local_flow | examples.py:59:6:59:27 | ControlFlowNode for fields_with_local_flow | +| examples.py:53:5:53:26 | ControlFlowNode for fields_with_local_flow | examples.py:59:6:59:27 | ControlFlowNode for fields_with_local_flow | | examples.py:53:5:53:26 | GSSA Variable fields_with_local_flow | examples.py:59:6:59:27 | ControlFlowNode for fields_with_local_flow | | examples.py:53:5:53:26 | GSSA Variable fields_with_local_flow | examples.py:59:6:59:27 | ControlFlowNode for fields_with_local_flow | -| examples.py:53:28:53:28 | ControlFlowNode for x | examples.py:53:28:53:28 | SSA variable x | -| examples.py:53:28:53:28 | ControlFlowNode for x | examples.py:53:28:53:28 | SSA variable x | -| examples.py:53:28:53:28 | ControlFlowNode for x | examples.py:53:28:53:28 | SSA variable x | -| examples.py:53:28:53:28 | ControlFlowNode for x | examples.py:53:28:53:28 | SSA variable x | | examples.py:53:28:53:28 | ControlFlowNode for x | examples.py:54:17:54:17 | ControlFlowNode for x | | examples.py:53:28:53:28 | ControlFlowNode for x | examples.py:54:17:54:17 | ControlFlowNode for x | | examples.py:53:28:53:28 | ControlFlowNode for x | examples.py:54:17:54:17 | ControlFlowNode for x | | examples.py:53:28:53:28 | ControlFlowNode for x | examples.py:54:17:54:17 | ControlFlowNode for x | | examples.py:53:28:53:28 | SSA variable x | examples.py:54:17:54:17 | ControlFlowNode for x | | examples.py:53:28:53:28 | SSA variable x | examples.py:54:17:54:17 | ControlFlowNode for x | -| examples.py:53:28:53:28 | SSA variable x | examples.py:54:17:54:17 | ControlFlowNode for x | -| examples.py:53:28:53:28 | SSA variable x | examples.py:54:17:54:17 | ControlFlowNode for x | +| examples.py:54:5:54:7 | ControlFlowNode for obj | examples.py:55:9:55:11 | ControlFlowNode for obj | +| examples.py:54:5:54:7 | ControlFlowNode for obj | examples.py:55:9:55:11 | ControlFlowNode for obj | +| examples.py:54:5:54:7 | ControlFlowNode for obj [Attribute foo] | examples.py:55:9:55:11 | ControlFlowNode for obj [Attribute foo] | +| examples.py:54:5:54:7 | ControlFlowNode for obj [Attribute foo] | examples.py:55:9:55:11 | ControlFlowNode for obj [Attribute foo] | | examples.py:54:5:54:7 | SSA variable obj | examples.py:55:9:55:11 | ControlFlowNode for obj | | examples.py:54:5:54:7 | SSA variable obj | examples.py:55:9:55:11 | ControlFlowNode for obj | -| examples.py:54:5:54:7 | SSA variable obj [Attribute foo] | examples.py:55:9:55:11 | ControlFlowNode for obj [Attribute foo] | -| examples.py:54:5:54:7 | SSA variable obj [Attribute foo] | examples.py:55:9:55:11 | ControlFlowNode for obj [Attribute foo] | -| examples.py:54:11:54:18 | ControlFlowNode for MyObj() | examples.py:54:5:54:7 | SSA variable obj | -| examples.py:54:11:54:18 | ControlFlowNode for MyObj() | examples.py:54:5:54:7 | SSA variable obj | +| examples.py:54:11:54:18 | ControlFlowNode for MyObj() | examples.py:54:5:54:7 | ControlFlowNode for obj | +| examples.py:54:11:54:18 | ControlFlowNode for MyObj() | examples.py:54:5:54:7 | ControlFlowNode for obj | | examples.py:54:11:54:18 | ControlFlowNode for MyObj() | examples.py:55:9:55:11 | ControlFlowNode for obj | | examples.py:54:11:54:18 | ControlFlowNode for MyObj() | examples.py:55:9:55:11 | ControlFlowNode for obj | -| examples.py:54:11:54:18 | ControlFlowNode for MyObj() [Attribute foo] | examples.py:54:5:54:7 | SSA variable obj [Attribute foo] | -| examples.py:54:11:54:18 | ControlFlowNode for MyObj() [Attribute foo] | examples.py:54:5:54:7 | SSA variable obj [Attribute foo] | +| examples.py:54:11:54:18 | ControlFlowNode for MyObj() [Attribute foo] | examples.py:54:5:54:7 | ControlFlowNode for obj [Attribute foo] | +| examples.py:54:11:54:18 | ControlFlowNode for MyObj() [Attribute foo] | examples.py:54:5:54:7 | ControlFlowNode for obj [Attribute foo] | | examples.py:54:11:54:18 | ControlFlowNode for MyObj() [Attribute foo] | examples.py:55:9:55:11 | ControlFlowNode for obj [Attribute foo] | | examples.py:54:11:54:18 | ControlFlowNode for MyObj() [Attribute foo] | examples.py:55:9:55:11 | ControlFlowNode for obj [Attribute foo] | | examples.py:54:11:54:18 | [pre objCreate] ControlFlowNode for MyObj() | examples.py:7:18:7:21 | ControlFlowNode for self | @@ -448,18 +515,20 @@ | examples.py:54:17:54:17 | ControlFlowNode for x | examples.py:54:11:54:18 | ControlFlowNode for MyObj() [Attribute foo] | | examples.py:54:17:54:17 | [post arg] ControlFlowNode for x | examples.py:59:29:59:34 | [post arg] ControlFlowNode for SOURCE | | examples.py:54:17:54:17 | [post arg] ControlFlowNode for x | examples.py:59:29:59:34 | [post arg] ControlFlowNode for SOURCE | -| examples.py:55:5:55:5 | SSA variable a | examples.py:56:12:56:12 | ControlFlowNode for a | -| examples.py:55:5:55:5 | SSA variable a | examples.py:56:12:56:12 | ControlFlowNode for a | +| examples.py:55:5:55:5 | ControlFlowNode for a | examples.py:56:12:56:12 | ControlFlowNode for a | +| examples.py:55:5:55:5 | ControlFlowNode for a | examples.py:56:12:56:12 | ControlFlowNode for a | +| examples.py:55:5:55:5 | ControlFlowNode for a | examples.py:56:12:56:12 | ControlFlowNode for a | +| examples.py:55:5:55:5 | ControlFlowNode for a | examples.py:56:12:56:12 | ControlFlowNode for a | | examples.py:55:5:55:5 | SSA variable a | examples.py:56:12:56:12 | ControlFlowNode for a | | examples.py:55:5:55:5 | SSA variable a | examples.py:56:12:56:12 | ControlFlowNode for a | | examples.py:55:9:55:11 | ControlFlowNode for obj [Attribute foo] | examples.py:55:9:55:15 | ControlFlowNode for Attribute | | examples.py:55:9:55:11 | ControlFlowNode for obj [Attribute foo] | examples.py:55:9:55:15 | ControlFlowNode for Attribute | | examples.py:55:9:55:11 | ControlFlowNode for obj [Attribute foo] | examples.py:55:9:55:15 | ControlFlowNode for Attribute | | examples.py:55:9:55:11 | ControlFlowNode for obj [Attribute foo] | examples.py:55:9:55:15 | ControlFlowNode for Attribute | -| examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:55:5:55:5 | SSA variable a | -| examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:55:5:55:5 | SSA variable a | -| examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:55:5:55:5 | SSA variable a | -| examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:55:5:55:5 | SSA variable a | +| examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:55:5:55:5 | ControlFlowNode for a | +| examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:55:5:55:5 | ControlFlowNode for a | +| examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:55:5:55:5 | ControlFlowNode for a | +| examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:55:5:55:5 | ControlFlowNode for a | | examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:56:12:56:12 | ControlFlowNode for a | | examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:56:12:56:12 | ControlFlowNode for a | | examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:56:12:56:12 | ControlFlowNode for a | @@ -532,20 +601,28 @@ | test.py:0:0:0:0 | ModuleVariableNode for Global Variable print in Module test | test.py:21:9:21:13 | ControlFlowNode for print | | test.py:0:0:0:0 | ModuleVariableNode for Global Variable setFoo in Module test | test.py:49:5:49:10 | ControlFlowNode for setFoo | | test.py:0:0:0:0 | ModuleVariableNode for Global Variable setFoo in Module test | test.py:49:5:49:10 | ControlFlowNode for setFoo | +| test.py:2:1:2:9 | ControlFlowNode for NONSOURCE | test.py:2:1:2:9 | GSSA Variable NONSOURCE | +| test.py:2:1:2:9 | ControlFlowNode for NONSOURCE | test.py:2:1:2:9 | GSSA Variable NONSOURCE | +| test.py:2:13:2:26 | ControlFlowNode for Str | test.py:2:1:2:9 | ControlFlowNode for NONSOURCE | +| test.py:2:13:2:26 | ControlFlowNode for Str | test.py:2:1:2:9 | ControlFlowNode for NONSOURCE | | test.py:2:13:2:26 | ControlFlowNode for Str | test.py:2:1:2:9 | GSSA Variable NONSOURCE | | test.py:2:13:2:26 | ControlFlowNode for Str | test.py:2:1:2:9 | GSSA Variable NONSOURCE | +| test.py:3:1:3:6 | ControlFlowNode for SOURCE | test.py:3:1:3:6 | GSSA Variable SOURCE | +| test.py:3:1:3:6 | ControlFlowNode for SOURCE | test.py:3:1:3:6 | GSSA Variable SOURCE | | test.py:3:1:3:6 | GSSA Variable SOURCE | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module test | | test.py:3:1:3:6 | GSSA Variable SOURCE | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SOURCE in Module test | +| test.py:3:10:3:17 | ControlFlowNode for Str | test.py:3:1:3:6 | ControlFlowNode for SOURCE | +| test.py:3:10:3:17 | ControlFlowNode for Str | test.py:3:1:3:6 | ControlFlowNode for SOURCE | | test.py:3:10:3:17 | ControlFlowNode for Str | test.py:3:1:3:6 | GSSA Variable SOURCE | | test.py:3:10:3:17 | ControlFlowNode for Str | test.py:3:1:3:6 | GSSA Variable SOURCE | +| test.py:6:1:6:17 | ControlFlowNode for FunctionExpr | test.py:6:5:6:13 | ControlFlowNode for is_source | +| test.py:6:1:6:17 | ControlFlowNode for FunctionExpr | test.py:6:5:6:13 | ControlFlowNode for is_source | | test.py:6:1:6:17 | ControlFlowNode for FunctionExpr | test.py:6:5:6:13 | GSSA Variable is_source | | test.py:6:1:6:17 | ControlFlowNode for FunctionExpr | test.py:6:5:6:13 | GSSA Variable is_source | +| test.py:6:5:6:13 | ControlFlowNode for is_source | test.py:6:5:6:13 | GSSA Variable is_source | +| test.py:6:5:6:13 | ControlFlowNode for is_source | test.py:6:5:6:13 | GSSA Variable is_source | | test.py:6:5:6:13 | GSSA Variable is_source | test.py:0:0:0:0 | ModuleVariableNode for Global Variable is_source in Module test | | test.py:6:5:6:13 | GSSA Variable is_source | test.py:0:0:0:0 | ModuleVariableNode for Global Variable is_source in Module test | -| test.py:6:15:6:15 | ControlFlowNode for x | test.py:6:15:6:15 | SSA variable x | -| test.py:6:15:6:15 | ControlFlowNode for x | test.py:6:15:6:15 | SSA variable x | -| test.py:6:15:6:15 | ControlFlowNode for x | test.py:6:15:6:15 | SSA variable x | -| test.py:6:15:6:15 | ControlFlowNode for x | test.py:6:15:6:15 | SSA variable x | | test.py:6:15:6:15 | ControlFlowNode for x | test.py:7:12:7:12 | ControlFlowNode for x | | test.py:6:15:6:15 | ControlFlowNode for x | test.py:7:12:7:12 | ControlFlowNode for x | | test.py:6:15:6:15 | ControlFlowNode for x | test.py:7:12:7:12 | ControlFlowNode for x | @@ -568,22 +645,12 @@ | test.py:6:15:6:15 | ControlFlowNode for x | test.py:7:71:7:71 | ControlFlowNode for x | | test.py:6:15:6:15 | SSA variable x | test.py:7:12:7:12 | ControlFlowNode for x | | test.py:6:15:6:15 | SSA variable x | test.py:7:12:7:12 | ControlFlowNode for x | -| test.py:6:15:6:15 | SSA variable x | test.py:7:12:7:12 | ControlFlowNode for x | -| test.py:6:15:6:15 | SSA variable x | test.py:7:12:7:12 | ControlFlowNode for x | | test.py:6:15:6:15 | SSA variable x | test.py:7:29:7:29 | ControlFlowNode for x | | test.py:6:15:6:15 | SSA variable x | test.py:7:29:7:29 | ControlFlowNode for x | -| test.py:6:15:6:15 | SSA variable x | test.py:7:29:7:29 | ControlFlowNode for x | -| test.py:6:15:6:15 | SSA variable x | test.py:7:29:7:29 | ControlFlowNode for x | -| test.py:6:15:6:15 | SSA variable x | test.py:7:47:7:47 | ControlFlowNode for x | | test.py:6:15:6:15 | SSA variable x | test.py:7:47:7:47 | ControlFlowNode for x | | test.py:6:15:6:15 | SSA variable x | test.py:7:47:7:47 | ControlFlowNode for x | -| test.py:6:15:6:15 | SSA variable x | test.py:7:47:7:47 | ControlFlowNode for x | -| test.py:6:15:6:15 | SSA variable x | test.py:7:58:7:58 | ControlFlowNode for x | | test.py:6:15:6:15 | SSA variable x | test.py:7:58:7:58 | ControlFlowNode for x | | test.py:6:15:6:15 | SSA variable x | test.py:7:58:7:58 | ControlFlowNode for x | -| test.py:6:15:6:15 | SSA variable x | test.py:7:58:7:58 | ControlFlowNode for x | -| test.py:6:15:6:15 | SSA variable x | test.py:7:71:7:71 | ControlFlowNode for x | -| test.py:6:15:6:15 | SSA variable x | test.py:7:71:7:71 | ControlFlowNode for x | | test.py:6:15:6:15 | SSA variable x | test.py:7:71:7:71 | ControlFlowNode for x | | test.py:6:15:6:15 | SSA variable x | test.py:7:71:7:71 | ControlFlowNode for x | | test.py:7:12:7:12 | ControlFlowNode for x | test.py:7:29:7:29 | ControlFlowNode for x | @@ -630,16 +697,16 @@ | test.py:7:58:7:58 | ControlFlowNode for x | test.py:7:71:7:71 | ControlFlowNode for x | | test.py:7:58:7:58 | ControlFlowNode for x | test.py:7:71:7:71 | ControlFlowNode for x | | test.py:7:58:7:58 | ControlFlowNode for x | test.py:7:71:7:71 | ControlFlowNode for x | +| test.py:10:1:10:12 | ControlFlowNode for FunctionExpr | test.py:10:5:10:8 | ControlFlowNode for SINK | +| test.py:10:1:10:12 | ControlFlowNode for FunctionExpr | test.py:10:5:10:8 | ControlFlowNode for SINK | | test.py:10:1:10:12 | ControlFlowNode for FunctionExpr | test.py:10:5:10:8 | GSSA Variable SINK | | test.py:10:1:10:12 | ControlFlowNode for FunctionExpr | test.py:10:5:10:8 | GSSA Variable SINK | | test.py:10:1:10:12 | GSSA Variable is_source | test.py:11:8:11:16 | ControlFlowNode for is_source | | test.py:10:1:10:12 | GSSA Variable is_source | test.py:11:8:11:16 | ControlFlowNode for is_source | +| test.py:10:5:10:8 | ControlFlowNode for SINK | test.py:10:5:10:8 | GSSA Variable SINK | +| test.py:10:5:10:8 | ControlFlowNode for SINK | test.py:10:5:10:8 | GSSA Variable SINK | | test.py:10:5:10:8 | GSSA Variable SINK | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SINK in Module test | | test.py:10:5:10:8 | GSSA Variable SINK | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SINK in Module test | -| test.py:10:10:10:10 | ControlFlowNode for x | test.py:10:10:10:10 | SSA variable x | -| test.py:10:10:10:10 | ControlFlowNode for x | test.py:10:10:10:10 | SSA variable x | -| test.py:10:10:10:10 | ControlFlowNode for x | test.py:10:10:10:10 | SSA variable x | -| test.py:10:10:10:10 | ControlFlowNode for x | test.py:10:10:10:10 | SSA variable x | | test.py:10:10:10:10 | ControlFlowNode for x | test.py:11:18:11:18 | ControlFlowNode for x | | test.py:10:10:10:10 | ControlFlowNode for x | test.py:11:18:11:18 | ControlFlowNode for x | | test.py:10:10:10:10 | ControlFlowNode for x | test.py:11:18:11:18 | ControlFlowNode for x | @@ -650,10 +717,6 @@ | test.py:10:10:10:10 | ControlFlowNode for x | test.py:14:34:14:34 | ControlFlowNode for x | | test.py:10:10:10:10 | SSA variable x | test.py:11:18:11:18 | ControlFlowNode for x | | test.py:10:10:10:10 | SSA variable x | test.py:11:18:11:18 | ControlFlowNode for x | -| test.py:10:10:10:10 | SSA variable x | test.py:11:18:11:18 | ControlFlowNode for x | -| test.py:10:10:10:10 | SSA variable x | test.py:11:18:11:18 | ControlFlowNode for x | -| test.py:10:10:10:10 | SSA variable x | test.py:14:34:14:34 | ControlFlowNode for x | -| test.py:10:10:10:10 | SSA variable x | test.py:14:34:14:34 | ControlFlowNode for x | | test.py:10:10:10:10 | SSA variable x | test.py:14:34:14:34 | ControlFlowNode for x | | test.py:10:10:10:10 | SSA variable x | test.py:14:34:14:34 | ControlFlowNode for x | | test.py:11:18:11:18 | ControlFlowNode for x | test.py:6:15:6:15 | ControlFlowNode for x | @@ -680,16 +743,16 @@ | test.py:11:18:11:18 | [post arg] ControlFlowNode for x | test.py:87:10:87:16 | [post arg] ControlFlowNode for Attribute | | test.py:11:18:11:18 | [post arg] ControlFlowNode for x | test.py:97:10:97:39 | [post arg] ControlFlowNode for fields_with_local_flow() | | test.py:11:18:11:18 | [post arg] ControlFlowNode for x | test.py:97:10:97:39 | [post arg] ControlFlowNode for fields_with_local_flow() | +| test.py:17:1:17:14 | ControlFlowNode for FunctionExpr | test.py:17:5:17:10 | ControlFlowNode for SINK_F | +| test.py:17:1:17:14 | ControlFlowNode for FunctionExpr | test.py:17:5:17:10 | ControlFlowNode for SINK_F | | test.py:17:1:17:14 | ControlFlowNode for FunctionExpr | test.py:17:5:17:10 | GSSA Variable SINK_F | | test.py:17:1:17:14 | ControlFlowNode for FunctionExpr | test.py:17:5:17:10 | GSSA Variable SINK_F | | test.py:17:1:17:14 | GSSA Variable is_source | test.py:18:8:18:16 | ControlFlowNode for is_source | | test.py:17:1:17:14 | GSSA Variable is_source | test.py:18:8:18:16 | ControlFlowNode for is_source | +| test.py:17:5:17:10 | ControlFlowNode for SINK_F | test.py:17:5:17:10 | GSSA Variable SINK_F | +| test.py:17:5:17:10 | ControlFlowNode for SINK_F | test.py:17:5:17:10 | GSSA Variable SINK_F | | test.py:17:5:17:10 | GSSA Variable SINK_F | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SINK_F in Module test | | test.py:17:5:17:10 | GSSA Variable SINK_F | test.py:0:0:0:0 | ModuleVariableNode for Global Variable SINK_F in Module test | -| test.py:17:12:17:12 | ControlFlowNode for x | test.py:17:12:17:12 | SSA variable x | -| test.py:17:12:17:12 | ControlFlowNode for x | test.py:17:12:17:12 | SSA variable x | -| test.py:17:12:17:12 | ControlFlowNode for x | test.py:17:12:17:12 | SSA variable x | -| test.py:17:12:17:12 | ControlFlowNode for x | test.py:17:12:17:12 | SSA variable x | | test.py:17:12:17:12 | ControlFlowNode for x | test.py:18:18:18:18 | ControlFlowNode for x | | test.py:17:12:17:12 | ControlFlowNode for x | test.py:18:18:18:18 | ControlFlowNode for x | | test.py:17:12:17:12 | ControlFlowNode for x | test.py:18:18:18:18 | ControlFlowNode for x | @@ -700,10 +763,6 @@ | test.py:17:12:17:12 | ControlFlowNode for x | test.py:19:34:19:34 | ControlFlowNode for x | | test.py:17:12:17:12 | SSA variable x | test.py:18:18:18:18 | ControlFlowNode for x | | test.py:17:12:17:12 | SSA variable x | test.py:18:18:18:18 | ControlFlowNode for x | -| test.py:17:12:17:12 | SSA variable x | test.py:18:18:18:18 | ControlFlowNode for x | -| test.py:17:12:17:12 | SSA variable x | test.py:18:18:18:18 | ControlFlowNode for x | -| test.py:17:12:17:12 | SSA variable x | test.py:19:34:19:34 | ControlFlowNode for x | -| test.py:17:12:17:12 | SSA variable x | test.py:19:34:19:34 | ControlFlowNode for x | | test.py:17:12:17:12 | SSA variable x | test.py:19:34:19:34 | ControlFlowNode for x | | test.py:17:12:17:12 | SSA variable x | test.py:19:34:19:34 | ControlFlowNode for x | | test.py:18:18:18:18 | ControlFlowNode for x | test.py:6:15:6:15 | ControlFlowNode for x | @@ -720,38 +779,30 @@ | test.py:18:18:18:18 | [post arg] ControlFlowNode for x | test.py:42:12:42:18 | [post arg] ControlFlowNode for Attribute | | test.py:19:34:19:34 | [post arg] ControlFlowNode for x | test.py:42:12:42:18 | [post arg] ControlFlowNode for Attribute | | test.py:19:34:19:34 | [post arg] ControlFlowNode for x | test.py:42:12:42:18 | [post arg] ControlFlowNode for Attribute | +| test.py:25:1:25:20 | ControlFlowNode for ClassExpr | test.py:25:7:25:11 | ControlFlowNode for MyObj | +| test.py:25:1:25:20 | ControlFlowNode for ClassExpr | test.py:25:7:25:11 | ControlFlowNode for MyObj | | test.py:25:1:25:20 | ControlFlowNode for ClassExpr | test.py:25:7:25:11 | GSSA Variable MyObj | | test.py:25:1:25:20 | ControlFlowNode for ClassExpr | test.py:25:7:25:11 | GSSA Variable MyObj | +| test.py:25:7:25:11 | ControlFlowNode for MyObj | test.py:25:7:25:11 | GSSA Variable MyObj | +| test.py:25:7:25:11 | ControlFlowNode for MyObj | test.py:25:7:25:11 | GSSA Variable MyObj | | test.py:25:7:25:11 | GSSA Variable MyObj | test.py:0:0:0:0 | ModuleVariableNode for Global Variable MyObj in Module test | | test.py:25:7:25:11 | GSSA Variable MyObj | test.py:0:0:0:0 | ModuleVariableNode for Global Variable MyObj in Module test | | test.py:25:13:25:18 | ControlFlowNode for object | test.py:33:17:33:22 | ControlFlowNode for object | | test.py:25:13:25:18 | ControlFlowNode for object | test.py:33:17:33:22 | ControlFlowNode for object | -| test.py:26:5:26:28 | ControlFlowNode for FunctionExpr | test.py:26:9:26:16 | SSA variable __init__ | -| test.py:26:5:26:28 | ControlFlowNode for FunctionExpr | test.py:26:9:26:16 | SSA variable __init__ | -| test.py:26:18:26:21 | ControlFlowNode for self | test.py:26:18:26:21 | SSA variable self | -| test.py:26:18:26:21 | ControlFlowNode for self | test.py:26:18:26:21 | SSA variable self | -| test.py:26:18:26:21 | ControlFlowNode for self | test.py:26:18:26:21 | SSA variable self | -| test.py:26:18:26:21 | ControlFlowNode for self | test.py:26:18:26:21 | SSA variable self | +| test.py:26:5:26:28 | ControlFlowNode for FunctionExpr | test.py:26:9:26:16 | ControlFlowNode for __init__ | +| test.py:26:5:26:28 | ControlFlowNode for FunctionExpr | test.py:26:9:26:16 | ControlFlowNode for __init__ | | test.py:26:18:26:21 | ControlFlowNode for self | test.py:27:9:27:12 | ControlFlowNode for self | | test.py:26:18:26:21 | ControlFlowNode for self | test.py:27:9:27:12 | ControlFlowNode for self | | test.py:26:18:26:21 | ControlFlowNode for self | test.py:27:9:27:12 | ControlFlowNode for self | | test.py:26:18:26:21 | ControlFlowNode for self | test.py:27:9:27:12 | ControlFlowNode for self | | test.py:26:18:26:21 | SSA variable self | test.py:27:9:27:12 | ControlFlowNode for self | | test.py:26:18:26:21 | SSA variable self | test.py:27:9:27:12 | ControlFlowNode for self | -| test.py:26:18:26:21 | SSA variable self | test.py:27:9:27:12 | ControlFlowNode for self | -| test.py:26:18:26:21 | SSA variable self | test.py:27:9:27:12 | ControlFlowNode for self | -| test.py:26:24:26:26 | ControlFlowNode for foo | test.py:26:24:26:26 | SSA variable foo | -| test.py:26:24:26:26 | ControlFlowNode for foo | test.py:26:24:26:26 | SSA variable foo | -| test.py:26:24:26:26 | ControlFlowNode for foo | test.py:26:24:26:26 | SSA variable foo | -| test.py:26:24:26:26 | ControlFlowNode for foo | test.py:26:24:26:26 | SSA variable foo | | test.py:26:24:26:26 | ControlFlowNode for foo | test.py:27:20:27:22 | ControlFlowNode for foo | | test.py:26:24:26:26 | ControlFlowNode for foo | test.py:27:20:27:22 | ControlFlowNode for foo | | test.py:26:24:26:26 | ControlFlowNode for foo | test.py:27:20:27:22 | ControlFlowNode for foo | | test.py:26:24:26:26 | ControlFlowNode for foo | test.py:27:20:27:22 | ControlFlowNode for foo | | test.py:26:24:26:26 | SSA variable foo | test.py:27:20:27:22 | ControlFlowNode for foo | | test.py:26:24:26:26 | SSA variable foo | test.py:27:20:27:22 | ControlFlowNode for foo | -| test.py:26:24:26:26 | SSA variable foo | test.py:27:20:27:22 | ControlFlowNode for foo | -| test.py:26:24:26:26 | SSA variable foo | test.py:27:20:27:22 | ControlFlowNode for foo | | test.py:27:9:27:12 | [post store] ControlFlowNode for self | test.py:35:20:35:30 | ControlFlowNode for MyObj() | | test.py:27:9:27:12 | [post store] ControlFlowNode for self | test.py:35:20:35:30 | ControlFlowNode for MyObj() | | test.py:27:9:27:12 | [post store] ControlFlowNode for self | test.py:47:13:47:23 | ControlFlowNode for MyObj() | @@ -772,57 +823,43 @@ | test.py:27:9:27:12 | [post store] ControlFlowNode for self [Attribute foo] | test.py:91:11:91:18 | ControlFlowNode for MyObj() [Attribute foo] | | test.py:27:20:27:22 | ControlFlowNode for foo | test.py:27:9:27:12 | [post store] ControlFlowNode for self [Attribute foo] | | test.py:27:20:27:22 | ControlFlowNode for foo | test.py:27:9:27:12 | [post store] ControlFlowNode for self [Attribute foo] | -| test.py:29:5:29:26 | ControlFlowNode for FunctionExpr | test.py:29:9:29:14 | SSA variable setFoo | -| test.py:29:5:29:26 | ControlFlowNode for FunctionExpr | test.py:29:9:29:14 | SSA variable setFoo | -| test.py:29:16:29:19 | ControlFlowNode for self | test.py:29:16:29:19 | SSA variable self | -| test.py:29:16:29:19 | ControlFlowNode for self | test.py:29:16:29:19 | SSA variable self | -| test.py:29:16:29:19 | ControlFlowNode for self | test.py:29:16:29:19 | SSA variable self | -| test.py:29:16:29:19 | ControlFlowNode for self | test.py:29:16:29:19 | SSA variable self | +| test.py:29:5:29:26 | ControlFlowNode for FunctionExpr | test.py:29:9:29:14 | ControlFlowNode for setFoo | +| test.py:29:5:29:26 | ControlFlowNode for FunctionExpr | test.py:29:9:29:14 | ControlFlowNode for setFoo | | test.py:29:16:29:19 | ControlFlowNode for self | test.py:30:9:30:12 | ControlFlowNode for self | | test.py:29:16:29:19 | ControlFlowNode for self | test.py:30:9:30:12 | ControlFlowNode for self | | test.py:29:16:29:19 | ControlFlowNode for self | test.py:30:9:30:12 | ControlFlowNode for self | | test.py:29:16:29:19 | ControlFlowNode for self | test.py:30:9:30:12 | ControlFlowNode for self | | test.py:29:16:29:19 | SSA variable self | test.py:30:9:30:12 | ControlFlowNode for self | | test.py:29:16:29:19 | SSA variable self | test.py:30:9:30:12 | ControlFlowNode for self | -| test.py:29:16:29:19 | SSA variable self | test.py:30:9:30:12 | ControlFlowNode for self | -| test.py:29:16:29:19 | SSA variable self | test.py:30:9:30:12 | ControlFlowNode for self | -| test.py:29:22:29:24 | ControlFlowNode for foo | test.py:29:22:29:24 | SSA variable foo | -| test.py:29:22:29:24 | ControlFlowNode for foo | test.py:29:22:29:24 | SSA variable foo | -| test.py:29:22:29:24 | ControlFlowNode for foo | test.py:29:22:29:24 | SSA variable foo | -| test.py:29:22:29:24 | ControlFlowNode for foo | test.py:29:22:29:24 | SSA variable foo | | test.py:29:22:29:24 | ControlFlowNode for foo | test.py:30:20:30:22 | ControlFlowNode for foo | | test.py:29:22:29:24 | ControlFlowNode for foo | test.py:30:20:30:22 | ControlFlowNode for foo | | test.py:29:22:29:24 | ControlFlowNode for foo | test.py:30:20:30:22 | ControlFlowNode for foo | | test.py:29:22:29:24 | ControlFlowNode for foo | test.py:30:20:30:22 | ControlFlowNode for foo | | test.py:29:22:29:24 | SSA variable foo | test.py:30:20:30:22 | ControlFlowNode for foo | | test.py:29:22:29:24 | SSA variable foo | test.py:30:20:30:22 | ControlFlowNode for foo | -| test.py:29:22:29:24 | SSA variable foo | test.py:30:20:30:22 | ControlFlowNode for foo | -| test.py:29:22:29:24 | SSA variable foo | test.py:30:20:30:22 | ControlFlowNode for foo | | test.py:30:9:30:12 | [post store] ControlFlowNode for self | test.py:56:5:56:9 | [post read] ControlFlowNode for myobj | | test.py:30:9:30:12 | [post store] ControlFlowNode for self | test.py:56:5:56:9 | [post read] ControlFlowNode for myobj | | test.py:30:9:30:12 | [post store] ControlFlowNode for self [Attribute foo] | test.py:56:5:56:9 | [post read] ControlFlowNode for myobj [Attribute foo] | | test.py:30:20:30:22 | ControlFlowNode for foo | test.py:30:9:30:12 | [post store] ControlFlowNode for self [Attribute foo] | | test.py:30:20:30:22 | ControlFlowNode for foo | test.py:30:9:30:12 | [post store] ControlFlowNode for self [Attribute foo] | +| test.py:33:1:33:24 | ControlFlowNode for ClassExpr | test.py:33:7:33:15 | ControlFlowNode for NestedObj | +| test.py:33:1:33:24 | ControlFlowNode for ClassExpr | test.py:33:7:33:15 | ControlFlowNode for NestedObj | | test.py:33:1:33:24 | ControlFlowNode for ClassExpr | test.py:33:7:33:15 | GSSA Variable NestedObj | | test.py:33:1:33:24 | ControlFlowNode for ClassExpr | test.py:33:7:33:15 | GSSA Variable NestedObj | +| test.py:33:7:33:15 | ControlFlowNode for NestedObj | test.py:33:7:33:15 | GSSA Variable NestedObj | +| test.py:33:7:33:15 | ControlFlowNode for NestedObj | test.py:33:7:33:15 | GSSA Variable NestedObj | | test.py:33:7:33:15 | GSSA Variable NestedObj | test.py:0:0:0:0 | ModuleVariableNode for Global Variable NestedObj in Module test | | test.py:33:7:33:15 | GSSA Variable NestedObj | test.py:0:0:0:0 | ModuleVariableNode for Global Variable NestedObj in Module test | -| test.py:34:5:34:23 | ControlFlowNode for FunctionExpr | test.py:34:9:34:16 | SSA variable __init__ | -| test.py:34:5:34:23 | ControlFlowNode for FunctionExpr | test.py:34:9:34:16 | SSA variable __init__ | +| test.py:34:5:34:23 | ControlFlowNode for FunctionExpr | test.py:34:9:34:16 | ControlFlowNode for __init__ | +| test.py:34:5:34:23 | ControlFlowNode for FunctionExpr | test.py:34:9:34:16 | ControlFlowNode for __init__ | | test.py:34:5:34:23 | GSSA Variable MyObj | test.py:35:20:35:24 | ControlFlowNode for MyObj | | test.py:34:5:34:23 | GSSA Variable MyObj | test.py:35:20:35:24 | ControlFlowNode for MyObj | -| test.py:34:18:34:21 | ControlFlowNode for self | test.py:34:18:34:21 | SSA variable self | -| test.py:34:18:34:21 | ControlFlowNode for self | test.py:34:18:34:21 | SSA variable self | -| test.py:34:18:34:21 | ControlFlowNode for self | test.py:34:18:34:21 | SSA variable self | -| test.py:34:18:34:21 | ControlFlowNode for self | test.py:34:18:34:21 | SSA variable self | | test.py:34:18:34:21 | ControlFlowNode for self | test.py:35:9:35:12 | ControlFlowNode for self | | test.py:34:18:34:21 | ControlFlowNode for self | test.py:35:9:35:12 | ControlFlowNode for self | | test.py:34:18:34:21 | ControlFlowNode for self | test.py:35:9:35:12 | ControlFlowNode for self | | test.py:34:18:34:21 | ControlFlowNode for self | test.py:35:9:35:12 | ControlFlowNode for self | | test.py:34:18:34:21 | SSA variable self | test.py:35:9:35:12 | ControlFlowNode for self | | test.py:34:18:34:21 | SSA variable self | test.py:35:9:35:12 | ControlFlowNode for self | -| test.py:34:18:34:21 | SSA variable self | test.py:35:9:35:12 | ControlFlowNode for self | -| test.py:34:18:34:21 | SSA variable self | test.py:35:9:35:12 | ControlFlowNode for self | | test.py:35:9:35:12 | [post store] ControlFlowNode for self | test.py:63:9:63:19 | ControlFlowNode for NestedObj() | | test.py:35:9:35:12 | [post store] ControlFlowNode for self | test.py:63:9:63:19 | ControlFlowNode for NestedObj() | | test.py:35:9:35:12 | [post store] ControlFlowNode for self | test.py:73:9:73:19 | ControlFlowNode for NestedObj() | @@ -838,39 +875,31 @@ | test.py:35:26:35:29 | ControlFlowNode for Str | test.py:26:24:26:26 | ControlFlowNode for foo | | test.py:35:26:35:29 | ControlFlowNode for Str | test.py:26:24:26:26 | ControlFlowNode for foo | | test.py:35:26:35:29 | ControlFlowNode for Str | test.py:35:20:35:30 | ControlFlowNode for MyObj() [Attribute foo] | -| test.py:37:5:37:21 | ControlFlowNode for FunctionExpr | test.py:37:9:37:14 | SSA variable getObj | -| test.py:37:5:37:21 | ControlFlowNode for FunctionExpr | test.py:37:9:37:14 | SSA variable getObj | -| test.py:37:16:37:19 | ControlFlowNode for self | test.py:37:16:37:19 | SSA variable self | -| test.py:37:16:37:19 | ControlFlowNode for self | test.py:37:16:37:19 | SSA variable self | -| test.py:37:16:37:19 | ControlFlowNode for self | test.py:37:16:37:19 | SSA variable self | -| test.py:37:16:37:19 | ControlFlowNode for self | test.py:37:16:37:19 | SSA variable self | +| test.py:37:5:37:21 | ControlFlowNode for FunctionExpr | test.py:37:9:37:14 | ControlFlowNode for getObj | +| test.py:37:5:37:21 | ControlFlowNode for FunctionExpr | test.py:37:9:37:14 | ControlFlowNode for getObj | | test.py:37:16:37:19 | ControlFlowNode for self | test.py:38:16:38:19 | ControlFlowNode for self | | test.py:37:16:37:19 | ControlFlowNode for self | test.py:38:16:38:19 | ControlFlowNode for self | | test.py:37:16:37:19 | ControlFlowNode for self | test.py:38:16:38:19 | ControlFlowNode for self | | test.py:37:16:37:19 | ControlFlowNode for self | test.py:38:16:38:19 | ControlFlowNode for self | -| test.py:37:16:37:19 | ControlFlowNode for self [Attribute obj] | test.py:37:16:37:19 | SSA variable self [Attribute obj] | | test.py:37:16:37:19 | ControlFlowNode for self [Attribute obj] | test.py:38:16:38:19 | ControlFlowNode for self [Attribute obj] | | test.py:37:16:37:19 | SSA variable self | test.py:38:16:38:19 | ControlFlowNode for self | | test.py:37:16:37:19 | SSA variable self | test.py:38:16:38:19 | ControlFlowNode for self | -| test.py:37:16:37:19 | SSA variable self | test.py:38:16:38:19 | ControlFlowNode for self | -| test.py:37:16:37:19 | SSA variable self | test.py:38:16:38:19 | ControlFlowNode for self | -| test.py:37:16:37:19 | SSA variable self [Attribute obj] | test.py:38:16:38:19 | ControlFlowNode for self [Attribute obj] | | test.py:38:16:38:19 | ControlFlowNode for self [Attribute obj] | test.py:38:16:38:23 | ControlFlowNode for Attribute | | test.py:38:16:38:19 | ControlFlowNode for self [Attribute obj] | test.py:38:16:38:23 | ControlFlowNode for Attribute | | test.py:38:16:38:19 | [post read] ControlFlowNode for self | test.py:75:5:75:5 | [post read] ControlFlowNode for a | | test.py:38:16:38:19 | [post read] ControlFlowNode for self | test.py:75:5:75:5 | [post read] ControlFlowNode for a | | test.py:38:16:38:23 | ControlFlowNode for Attribute | test.py:75:5:75:14 | ControlFlowNode for Attribute() | | test.py:38:16:38:23 | ControlFlowNode for Attribute | test.py:75:5:75:14 | ControlFlowNode for Attribute() | +| test.py:41:1:41:19 | ControlFlowNode for FunctionExpr | test.py:41:5:41:10 | ControlFlowNode for setFoo | +| test.py:41:1:41:19 | ControlFlowNode for FunctionExpr | test.py:41:5:41:10 | ControlFlowNode for setFoo | | test.py:41:1:41:19 | ControlFlowNode for FunctionExpr | test.py:41:5:41:10 | GSSA Variable setFoo | | test.py:41:1:41:19 | ControlFlowNode for FunctionExpr | test.py:41:5:41:10 | GSSA Variable setFoo | | test.py:41:1:41:19 | GSSA Variable SINK_F | test.py:42:5:42:10 | ControlFlowNode for SINK_F | | test.py:41:1:41:19 | GSSA Variable SINK_F | test.py:42:5:42:10 | ControlFlowNode for SINK_F | +| test.py:41:5:41:10 | ControlFlowNode for setFoo | test.py:41:5:41:10 | GSSA Variable setFoo | +| test.py:41:5:41:10 | ControlFlowNode for setFoo | test.py:41:5:41:10 | GSSA Variable setFoo | | test.py:41:5:41:10 | GSSA Variable setFoo | test.py:0:0:0:0 | ModuleVariableNode for Global Variable setFoo in Module test | | test.py:41:5:41:10 | GSSA Variable setFoo | test.py:0:0:0:0 | ModuleVariableNode for Global Variable setFoo in Module test | -| test.py:41:12:41:14 | ControlFlowNode for obj | test.py:41:12:41:14 | SSA variable obj | -| test.py:41:12:41:14 | ControlFlowNode for obj | test.py:41:12:41:14 | SSA variable obj | -| test.py:41:12:41:14 | ControlFlowNode for obj | test.py:41:12:41:14 | SSA variable obj | -| test.py:41:12:41:14 | ControlFlowNode for obj | test.py:41:12:41:14 | SSA variable obj | | test.py:41:12:41:14 | ControlFlowNode for obj | test.py:42:12:42:14 | ControlFlowNode for obj | | test.py:41:12:41:14 | ControlFlowNode for obj | test.py:42:12:42:14 | ControlFlowNode for obj | | test.py:41:12:41:14 | ControlFlowNode for obj | test.py:42:12:42:14 | ControlFlowNode for obj | @@ -879,29 +908,17 @@ | test.py:41:12:41:14 | ControlFlowNode for obj | test.py:43:5:43:7 | ControlFlowNode for obj | | test.py:41:12:41:14 | ControlFlowNode for obj | test.py:43:5:43:7 | ControlFlowNode for obj | | test.py:41:12:41:14 | ControlFlowNode for obj | test.py:43:5:43:7 | ControlFlowNode for obj | -| test.py:41:12:41:14 | ControlFlowNode for obj [Attribute foo] | test.py:41:12:41:14 | SSA variable obj [Attribute foo] | | test.py:41:12:41:14 | ControlFlowNode for obj [Attribute foo] | test.py:42:12:42:14 | ControlFlowNode for obj [Attribute foo] | | test.py:41:12:41:14 | SSA variable obj | test.py:42:12:42:14 | ControlFlowNode for obj | | test.py:41:12:41:14 | SSA variable obj | test.py:42:12:42:14 | ControlFlowNode for obj | -| test.py:41:12:41:14 | SSA variable obj | test.py:42:12:42:14 | ControlFlowNode for obj | -| test.py:41:12:41:14 | SSA variable obj | test.py:42:12:42:14 | ControlFlowNode for obj | -| test.py:41:12:41:14 | SSA variable obj | test.py:43:5:43:7 | ControlFlowNode for obj | | test.py:41:12:41:14 | SSA variable obj | test.py:43:5:43:7 | ControlFlowNode for obj | | test.py:41:12:41:14 | SSA variable obj | test.py:43:5:43:7 | ControlFlowNode for obj | -| test.py:41:12:41:14 | SSA variable obj | test.py:43:5:43:7 | ControlFlowNode for obj | -| test.py:41:12:41:14 | SSA variable obj [Attribute foo] | test.py:42:12:42:14 | ControlFlowNode for obj [Attribute foo] | -| test.py:41:17:41:17 | ControlFlowNode for x | test.py:41:17:41:17 | SSA variable x | -| test.py:41:17:41:17 | ControlFlowNode for x | test.py:41:17:41:17 | SSA variable x | -| test.py:41:17:41:17 | ControlFlowNode for x | test.py:41:17:41:17 | SSA variable x | -| test.py:41:17:41:17 | ControlFlowNode for x | test.py:41:17:41:17 | SSA variable x | | test.py:41:17:41:17 | ControlFlowNode for x | test.py:43:15:43:15 | ControlFlowNode for x | | test.py:41:17:41:17 | ControlFlowNode for x | test.py:43:15:43:15 | ControlFlowNode for x | | test.py:41:17:41:17 | ControlFlowNode for x | test.py:43:15:43:15 | ControlFlowNode for x | | test.py:41:17:41:17 | ControlFlowNode for x | test.py:43:15:43:15 | ControlFlowNode for x | | test.py:41:17:41:17 | SSA variable x | test.py:43:15:43:15 | ControlFlowNode for x | | test.py:41:17:41:17 | SSA variable x | test.py:43:15:43:15 | ControlFlowNode for x | -| test.py:41:17:41:17 | SSA variable x | test.py:43:15:43:15 | ControlFlowNode for x | -| test.py:41:17:41:17 | SSA variable x | test.py:43:15:43:15 | ControlFlowNode for x | | test.py:42:12:42:14 | ControlFlowNode for obj | test.py:43:5:43:7 | ControlFlowNode for obj | | test.py:42:12:42:14 | ControlFlowNode for obj | test.py:43:5:43:7 | ControlFlowNode for obj | | test.py:42:12:42:14 | ControlFlowNode for obj | test.py:43:5:43:7 | ControlFlowNode for obj | @@ -923,6 +940,8 @@ | test.py:43:5:43:7 | [post store] ControlFlowNode for obj [Attribute foo] | test.py:49:12:49:16 | [post arg] ControlFlowNode for myobj [Attribute foo] | | test.py:43:15:43:15 | ControlFlowNode for x | test.py:43:5:43:7 | [post store] ControlFlowNode for obj [Attribute foo] | | test.py:43:15:43:15 | ControlFlowNode for x | test.py:43:5:43:7 | [post store] ControlFlowNode for obj [Attribute foo] | +| test.py:46:1:46:20 | ControlFlowNode for FunctionExpr | test.py:46:5:46:17 | ControlFlowNode for test_example1 | +| test.py:46:1:46:20 | ControlFlowNode for FunctionExpr | test.py:46:5:46:17 | ControlFlowNode for test_example1 | | test.py:46:1:46:20 | ControlFlowNode for FunctionExpr | test.py:46:5:46:17 | GSSA Variable test_example1 | | test.py:46:1:46:20 | ControlFlowNode for FunctionExpr | test.py:46:5:46:17 | GSSA Variable test_example1 | | test.py:46:1:46:20 | GSSA Variable MyObj | test.py:47:13:47:17 | ControlFlowNode for MyObj | @@ -933,19 +952,25 @@ | test.py:46:1:46:20 | GSSA Variable SOURCE | test.py:49:19:49:24 | ControlFlowNode for SOURCE | | test.py:46:1:46:20 | GSSA Variable setFoo | test.py:49:5:49:10 | ControlFlowNode for setFoo | | test.py:46:1:46:20 | GSSA Variable setFoo | test.py:49:5:49:10 | ControlFlowNode for setFoo | +| test.py:46:5:46:17 | ControlFlowNode for test_example1 | test.py:46:5:46:17 | GSSA Variable test_example1 | +| test.py:46:5:46:17 | ControlFlowNode for test_example1 | test.py:46:5:46:17 | GSSA Variable test_example1 | +| test.py:47:5:47:9 | ControlFlowNode for myobj | test.py:49:12:49:16 | ControlFlowNode for myobj | +| test.py:47:5:47:9 | ControlFlowNode for myobj | test.py:49:12:49:16 | ControlFlowNode for myobj | +| test.py:47:5:47:9 | ControlFlowNode for myobj | test.py:50:10:50:14 | ControlFlowNode for myobj | +| test.py:47:5:47:9 | ControlFlowNode for myobj | test.py:50:10:50:14 | ControlFlowNode for myobj | +| test.py:47:5:47:9 | ControlFlowNode for myobj [Attribute foo] | test.py:49:12:49:16 | ControlFlowNode for myobj [Attribute foo] | +| test.py:47:5:47:9 | ControlFlowNode for myobj [Attribute foo] | test.py:50:10:50:14 | ControlFlowNode for myobj [Attribute foo] | | test.py:47:5:47:9 | SSA variable myobj | test.py:49:12:49:16 | ControlFlowNode for myobj | | test.py:47:5:47:9 | SSA variable myobj | test.py:49:12:49:16 | ControlFlowNode for myobj | | test.py:47:5:47:9 | SSA variable myobj | test.py:50:10:50:14 | ControlFlowNode for myobj | | test.py:47:5:47:9 | SSA variable myobj | test.py:50:10:50:14 | ControlFlowNode for myobj | -| test.py:47:5:47:9 | SSA variable myobj [Attribute foo] | test.py:49:12:49:16 | ControlFlowNode for myobj [Attribute foo] | -| test.py:47:5:47:9 | SSA variable myobj [Attribute foo] | test.py:50:10:50:14 | ControlFlowNode for myobj [Attribute foo] | -| test.py:47:13:47:23 | ControlFlowNode for MyObj() | test.py:47:5:47:9 | SSA variable myobj | -| test.py:47:13:47:23 | ControlFlowNode for MyObj() | test.py:47:5:47:9 | SSA variable myobj | +| test.py:47:13:47:23 | ControlFlowNode for MyObj() | test.py:47:5:47:9 | ControlFlowNode for myobj | +| test.py:47:13:47:23 | ControlFlowNode for MyObj() | test.py:47:5:47:9 | ControlFlowNode for myobj | | test.py:47:13:47:23 | ControlFlowNode for MyObj() | test.py:49:12:49:16 | ControlFlowNode for myobj | | test.py:47:13:47:23 | ControlFlowNode for MyObj() | test.py:49:12:49:16 | ControlFlowNode for myobj | | test.py:47:13:47:23 | ControlFlowNode for MyObj() | test.py:50:10:50:14 | ControlFlowNode for myobj | | test.py:47:13:47:23 | ControlFlowNode for MyObj() | test.py:50:10:50:14 | ControlFlowNode for myobj | -| test.py:47:13:47:23 | ControlFlowNode for MyObj() [Attribute foo] | test.py:47:5:47:9 | SSA variable myobj [Attribute foo] | +| test.py:47:13:47:23 | ControlFlowNode for MyObj() [Attribute foo] | test.py:47:5:47:9 | ControlFlowNode for myobj [Attribute foo] | | test.py:47:13:47:23 | ControlFlowNode for MyObj() [Attribute foo] | test.py:49:12:49:16 | ControlFlowNode for myobj [Attribute foo] | | test.py:47:13:47:23 | ControlFlowNode for MyObj() [Attribute foo] | test.py:50:10:50:14 | ControlFlowNode for myobj [Attribute foo] | | test.py:47:13:47:23 | [pre objCreate] ControlFlowNode for MyObj() | test.py:26:18:26:21 | ControlFlowNode for self | @@ -969,6 +994,8 @@ | test.py:50:10:50:14 | ControlFlowNode for myobj [Attribute foo] | test.py:50:10:50:18 | ControlFlowNode for Attribute | | test.py:50:10:50:18 | ControlFlowNode for Attribute | test.py:10:10:10:10 | ControlFlowNode for x | | test.py:50:10:50:18 | ControlFlowNode for Attribute | test.py:10:10:10:10 | ControlFlowNode for x | +| test.py:53:1:53:27 | ControlFlowNode for FunctionExpr | test.py:53:5:53:24 | ControlFlowNode for test_example1_method | +| test.py:53:1:53:27 | ControlFlowNode for FunctionExpr | test.py:53:5:53:24 | ControlFlowNode for test_example1_method | | test.py:53:1:53:27 | ControlFlowNode for FunctionExpr | test.py:53:5:53:24 | GSSA Variable test_example1_method | | test.py:53:1:53:27 | ControlFlowNode for FunctionExpr | test.py:53:5:53:24 | GSSA Variable test_example1_method | | test.py:53:1:53:27 | GSSA Variable MyObj | test.py:54:13:54:17 | ControlFlowNode for MyObj | @@ -977,19 +1004,25 @@ | test.py:53:1:53:27 | GSSA Variable SINK | test.py:57:5:57:8 | ControlFlowNode for SINK | | test.py:53:1:53:27 | GSSA Variable SOURCE | test.py:56:18:56:23 | ControlFlowNode for SOURCE | | test.py:53:1:53:27 | GSSA Variable SOURCE | test.py:56:18:56:23 | ControlFlowNode for SOURCE | +| test.py:53:5:53:24 | ControlFlowNode for test_example1_method | test.py:53:5:53:24 | GSSA Variable test_example1_method | +| test.py:53:5:53:24 | ControlFlowNode for test_example1_method | test.py:53:5:53:24 | GSSA Variable test_example1_method | +| test.py:54:5:54:9 | ControlFlowNode for myobj | test.py:56:5:56:9 | ControlFlowNode for myobj | +| test.py:54:5:54:9 | ControlFlowNode for myobj | test.py:56:5:56:9 | ControlFlowNode for myobj | +| test.py:54:5:54:9 | ControlFlowNode for myobj | test.py:57:10:57:14 | ControlFlowNode for myobj | +| test.py:54:5:54:9 | ControlFlowNode for myobj | test.py:57:10:57:14 | ControlFlowNode for myobj | +| test.py:54:5:54:9 | ControlFlowNode for myobj [Attribute foo] | test.py:56:5:56:9 | ControlFlowNode for myobj [Attribute foo] | +| test.py:54:5:54:9 | ControlFlowNode for myobj [Attribute foo] | test.py:57:10:57:14 | ControlFlowNode for myobj [Attribute foo] | | test.py:54:5:54:9 | SSA variable myobj | test.py:56:5:56:9 | ControlFlowNode for myobj | | test.py:54:5:54:9 | SSA variable myobj | test.py:56:5:56:9 | ControlFlowNode for myobj | | test.py:54:5:54:9 | SSA variable myobj | test.py:57:10:57:14 | ControlFlowNode for myobj | | test.py:54:5:54:9 | SSA variable myobj | test.py:57:10:57:14 | ControlFlowNode for myobj | -| test.py:54:5:54:9 | SSA variable myobj [Attribute foo] | test.py:56:5:56:9 | ControlFlowNode for myobj [Attribute foo] | -| test.py:54:5:54:9 | SSA variable myobj [Attribute foo] | test.py:57:10:57:14 | ControlFlowNode for myobj [Attribute foo] | -| test.py:54:13:54:23 | ControlFlowNode for MyObj() | test.py:54:5:54:9 | SSA variable myobj | -| test.py:54:13:54:23 | ControlFlowNode for MyObj() | test.py:54:5:54:9 | SSA variable myobj | +| test.py:54:13:54:23 | ControlFlowNode for MyObj() | test.py:54:5:54:9 | ControlFlowNode for myobj | +| test.py:54:13:54:23 | ControlFlowNode for MyObj() | test.py:54:5:54:9 | ControlFlowNode for myobj | | test.py:54:13:54:23 | ControlFlowNode for MyObj() | test.py:56:5:56:9 | ControlFlowNode for myobj | | test.py:54:13:54:23 | ControlFlowNode for MyObj() | test.py:56:5:56:9 | ControlFlowNode for myobj | | test.py:54:13:54:23 | ControlFlowNode for MyObj() | test.py:57:10:57:14 | ControlFlowNode for myobj | | test.py:54:13:54:23 | ControlFlowNode for MyObj() | test.py:57:10:57:14 | ControlFlowNode for myobj | -| test.py:54:13:54:23 | ControlFlowNode for MyObj() [Attribute foo] | test.py:54:5:54:9 | SSA variable myobj [Attribute foo] | +| test.py:54:13:54:23 | ControlFlowNode for MyObj() [Attribute foo] | test.py:54:5:54:9 | ControlFlowNode for myobj [Attribute foo] | | test.py:54:13:54:23 | ControlFlowNode for MyObj() [Attribute foo] | test.py:56:5:56:9 | ControlFlowNode for myobj [Attribute foo] | | test.py:54:13:54:23 | ControlFlowNode for MyObj() [Attribute foo] | test.py:57:10:57:14 | ControlFlowNode for myobj [Attribute foo] | | test.py:54:13:54:23 | [pre objCreate] ControlFlowNode for MyObj() | test.py:26:18:26:21 | ControlFlowNode for self | @@ -1012,42 +1045,52 @@ | test.py:57:10:57:14 | ControlFlowNode for myobj [Attribute foo] | test.py:57:10:57:18 | ControlFlowNode for Attribute | | test.py:57:10:57:18 | ControlFlowNode for Attribute | test.py:10:10:10:10 | ControlFlowNode for x | | test.py:57:10:57:18 | ControlFlowNode for Attribute | test.py:10:10:10:10 | ControlFlowNode for x | +| test.py:60:1:60:20 | ControlFlowNode for FunctionExpr | test.py:60:5:60:17 | ControlFlowNode for test_example2 | +| test.py:60:1:60:20 | ControlFlowNode for FunctionExpr | test.py:60:5:60:17 | ControlFlowNode for test_example2 | | test.py:60:1:60:20 | ControlFlowNode for FunctionExpr | test.py:60:5:60:17 | GSSA Variable test_example2 | | test.py:60:1:60:20 | ControlFlowNode for FunctionExpr | test.py:60:5:60:17 | GSSA Variable test_example2 | | test.py:60:1:60:20 | GSSA Variable NestedObj | test.py:63:9:63:17 | ControlFlowNode for NestedObj | | test.py:60:1:60:20 | GSSA Variable NestedObj | test.py:63:9:63:17 | ControlFlowNode for NestedObj | | test.py:60:1:60:20 | GSSA Variable SINK | test.py:67:5:67:8 | ControlFlowNode for SINK | | test.py:60:1:60:20 | GSSA Variable SINK | test.py:67:5:67:8 | ControlFlowNode for SINK | -| test.py:60:1:60:20 | GSSA Variable SOURCE | test.py:61:5:61:5 | SSA variable x | -| test.py:60:1:60:20 | GSSA Variable SOURCE | test.py:61:5:61:5 | SSA variable x | +| test.py:60:1:60:20 | GSSA Variable SOURCE | test.py:61:5:61:5 | ControlFlowNode for x | +| test.py:60:1:60:20 | GSSA Variable SOURCE | test.py:61:5:61:5 | ControlFlowNode for x | | test.py:60:1:60:20 | GSSA Variable SOURCE | test.py:61:9:61:14 | ControlFlowNode for SOURCE | | test.py:60:1:60:20 | GSSA Variable SOURCE | test.py:61:9:61:14 | ControlFlowNode for SOURCE | | test.py:60:1:60:20 | GSSA Variable SOURCE | test.py:65:17:65:17 | ControlFlowNode for x | | test.py:60:1:60:20 | GSSA Variable SOURCE | test.py:65:17:65:17 | ControlFlowNode for x | +| test.py:60:5:60:17 | ControlFlowNode for test_example2 | test.py:60:5:60:17 | GSSA Variable test_example2 | +| test.py:60:5:60:17 | ControlFlowNode for test_example2 | test.py:60:5:60:17 | GSSA Variable test_example2 | +| test.py:61:5:61:5 | ControlFlowNode for x | test.py:65:17:65:17 | ControlFlowNode for x | +| test.py:61:5:61:5 | ControlFlowNode for x | test.py:65:17:65:17 | ControlFlowNode for x | | test.py:61:5:61:5 | SSA variable x | test.py:65:17:65:17 | ControlFlowNode for x | | test.py:61:5:61:5 | SSA variable x | test.py:65:17:65:17 | ControlFlowNode for x | -| test.py:61:9:61:14 | ControlFlowNode for SOURCE | test.py:61:5:61:5 | SSA variable x | -| test.py:61:9:61:14 | ControlFlowNode for SOURCE | test.py:61:5:61:5 | SSA variable x | +| test.py:61:9:61:14 | ControlFlowNode for SOURCE | test.py:61:5:61:5 | ControlFlowNode for x | +| test.py:61:9:61:14 | ControlFlowNode for SOURCE | test.py:61:5:61:5 | ControlFlowNode for x | | test.py:61:9:61:14 | ControlFlowNode for SOURCE | test.py:65:17:65:17 | ControlFlowNode for x | | test.py:61:9:61:14 | ControlFlowNode for SOURCE | test.py:65:17:65:17 | ControlFlowNode for x | +| test.py:63:5:63:5 | ControlFlowNode for a | test.py:65:5:65:5 | ControlFlowNode for a | +| test.py:63:5:63:5 | ControlFlowNode for a | test.py:65:5:65:5 | ControlFlowNode for a | +| test.py:63:5:63:5 | ControlFlowNode for a | test.py:67:10:67:10 | ControlFlowNode for a | +| test.py:63:5:63:5 | ControlFlowNode for a | test.py:67:10:67:10 | ControlFlowNode for a | +| test.py:63:5:63:5 | ControlFlowNode for a [Attribute obj, Attribute foo] | test.py:65:5:65:5 | ControlFlowNode for a [Attribute obj, Attribute foo] | +| test.py:63:5:63:5 | ControlFlowNode for a [Attribute obj, Attribute foo] | test.py:67:10:67:10 | ControlFlowNode for a [Attribute obj, Attribute foo] | +| test.py:63:5:63:5 | ControlFlowNode for a [Attribute obj] | test.py:65:5:65:5 | ControlFlowNode for a [Attribute obj] | +| test.py:63:5:63:5 | ControlFlowNode for a [Attribute obj] | test.py:67:10:67:10 | ControlFlowNode for a [Attribute obj] | | test.py:63:5:63:5 | SSA variable a | test.py:65:5:65:5 | ControlFlowNode for a | | test.py:63:5:63:5 | SSA variable a | test.py:65:5:65:5 | ControlFlowNode for a | | test.py:63:5:63:5 | SSA variable a | test.py:67:10:67:10 | ControlFlowNode for a | | test.py:63:5:63:5 | SSA variable a | test.py:67:10:67:10 | ControlFlowNode for a | -| test.py:63:5:63:5 | SSA variable a [Attribute obj, Attribute foo] | test.py:65:5:65:5 | ControlFlowNode for a [Attribute obj, Attribute foo] | -| test.py:63:5:63:5 | SSA variable a [Attribute obj, Attribute foo] | test.py:67:10:67:10 | ControlFlowNode for a [Attribute obj, Attribute foo] | -| test.py:63:5:63:5 | SSA variable a [Attribute obj] | test.py:65:5:65:5 | ControlFlowNode for a [Attribute obj] | -| test.py:63:5:63:5 | SSA variable a [Attribute obj] | test.py:67:10:67:10 | ControlFlowNode for a [Attribute obj] | -| test.py:63:9:63:19 | ControlFlowNode for NestedObj() | test.py:63:5:63:5 | SSA variable a | -| test.py:63:9:63:19 | ControlFlowNode for NestedObj() | test.py:63:5:63:5 | SSA variable a | +| test.py:63:9:63:19 | ControlFlowNode for NestedObj() | test.py:63:5:63:5 | ControlFlowNode for a | +| test.py:63:9:63:19 | ControlFlowNode for NestedObj() | test.py:63:5:63:5 | ControlFlowNode for a | | test.py:63:9:63:19 | ControlFlowNode for NestedObj() | test.py:65:5:65:5 | ControlFlowNode for a | | test.py:63:9:63:19 | ControlFlowNode for NestedObj() | test.py:65:5:65:5 | ControlFlowNode for a | | test.py:63:9:63:19 | ControlFlowNode for NestedObj() | test.py:67:10:67:10 | ControlFlowNode for a | | test.py:63:9:63:19 | ControlFlowNode for NestedObj() | test.py:67:10:67:10 | ControlFlowNode for a | -| test.py:63:9:63:19 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | test.py:63:5:63:5 | SSA variable a [Attribute obj, Attribute foo] | +| test.py:63:9:63:19 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | test.py:63:5:63:5 | ControlFlowNode for a [Attribute obj, Attribute foo] | | test.py:63:9:63:19 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | test.py:65:5:65:5 | ControlFlowNode for a [Attribute obj, Attribute foo] | | test.py:63:9:63:19 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | test.py:67:10:67:10 | ControlFlowNode for a [Attribute obj, Attribute foo] | -| test.py:63:9:63:19 | ControlFlowNode for NestedObj() [Attribute obj] | test.py:63:5:63:5 | SSA variable a [Attribute obj] | +| test.py:63:9:63:19 | ControlFlowNode for NestedObj() [Attribute obj] | test.py:63:5:63:5 | ControlFlowNode for a [Attribute obj] | | test.py:63:9:63:19 | ControlFlowNode for NestedObj() [Attribute obj] | test.py:65:5:65:5 | ControlFlowNode for a [Attribute obj] | | test.py:63:9:63:19 | ControlFlowNode for NestedObj() [Attribute obj] | test.py:67:10:67:10 | ControlFlowNode for a [Attribute obj] | | test.py:63:9:63:19 | [pre objCreate] ControlFlowNode for NestedObj() | test.py:34:18:34:21 | ControlFlowNode for self | @@ -1072,42 +1115,52 @@ | test.py:67:10:67:14 | ControlFlowNode for Attribute [Attribute foo] | test.py:67:10:67:18 | ControlFlowNode for Attribute | | test.py:67:10:67:18 | ControlFlowNode for Attribute | test.py:10:10:10:10 | ControlFlowNode for x | | test.py:67:10:67:18 | ControlFlowNode for Attribute | test.py:10:10:10:10 | ControlFlowNode for x | +| test.py:70:1:70:27 | ControlFlowNode for FunctionExpr | test.py:70:5:70:24 | ControlFlowNode for test_example2_method | +| test.py:70:1:70:27 | ControlFlowNode for FunctionExpr | test.py:70:5:70:24 | ControlFlowNode for test_example2_method | | test.py:70:1:70:27 | ControlFlowNode for FunctionExpr | test.py:70:5:70:24 | GSSA Variable test_example2_method | | test.py:70:1:70:27 | ControlFlowNode for FunctionExpr | test.py:70:5:70:24 | GSSA Variable test_example2_method | | test.py:70:1:70:27 | GSSA Variable NestedObj | test.py:73:9:73:17 | ControlFlowNode for NestedObj | | test.py:70:1:70:27 | GSSA Variable NestedObj | test.py:73:9:73:17 | ControlFlowNode for NestedObj | | test.py:70:1:70:27 | GSSA Variable SINK | test.py:77:5:77:8 | ControlFlowNode for SINK | | test.py:70:1:70:27 | GSSA Variable SINK | test.py:77:5:77:8 | ControlFlowNode for SINK | -| test.py:70:1:70:27 | GSSA Variable SOURCE | test.py:71:5:71:5 | SSA variable x | -| test.py:70:1:70:27 | GSSA Variable SOURCE | test.py:71:5:71:5 | SSA variable x | +| test.py:70:1:70:27 | GSSA Variable SOURCE | test.py:71:5:71:5 | ControlFlowNode for x | +| test.py:70:1:70:27 | GSSA Variable SOURCE | test.py:71:5:71:5 | ControlFlowNode for x | | test.py:70:1:70:27 | GSSA Variable SOURCE | test.py:71:9:71:14 | ControlFlowNode for SOURCE | | test.py:70:1:70:27 | GSSA Variable SOURCE | test.py:71:9:71:14 | ControlFlowNode for SOURCE | | test.py:70:1:70:27 | GSSA Variable SOURCE | test.py:75:22:75:22 | ControlFlowNode for x | | test.py:70:1:70:27 | GSSA Variable SOURCE | test.py:75:22:75:22 | ControlFlowNode for x | +| test.py:70:5:70:24 | ControlFlowNode for test_example2_method | test.py:70:5:70:24 | GSSA Variable test_example2_method | +| test.py:70:5:70:24 | ControlFlowNode for test_example2_method | test.py:70:5:70:24 | GSSA Variable test_example2_method | +| test.py:71:5:71:5 | ControlFlowNode for x | test.py:75:22:75:22 | ControlFlowNode for x | +| test.py:71:5:71:5 | ControlFlowNode for x | test.py:75:22:75:22 | ControlFlowNode for x | | test.py:71:5:71:5 | SSA variable x | test.py:75:22:75:22 | ControlFlowNode for x | | test.py:71:5:71:5 | SSA variable x | test.py:75:22:75:22 | ControlFlowNode for x | -| test.py:71:9:71:14 | ControlFlowNode for SOURCE | test.py:71:5:71:5 | SSA variable x | -| test.py:71:9:71:14 | ControlFlowNode for SOURCE | test.py:71:5:71:5 | SSA variable x | +| test.py:71:9:71:14 | ControlFlowNode for SOURCE | test.py:71:5:71:5 | ControlFlowNode for x | +| test.py:71:9:71:14 | ControlFlowNode for SOURCE | test.py:71:5:71:5 | ControlFlowNode for x | | test.py:71:9:71:14 | ControlFlowNode for SOURCE | test.py:75:22:75:22 | ControlFlowNode for x | | test.py:71:9:71:14 | ControlFlowNode for SOURCE | test.py:75:22:75:22 | ControlFlowNode for x | +| test.py:73:5:73:5 | ControlFlowNode for a | test.py:75:5:75:5 | ControlFlowNode for a | +| test.py:73:5:73:5 | ControlFlowNode for a | test.py:75:5:75:5 | ControlFlowNode for a | +| test.py:73:5:73:5 | ControlFlowNode for a | test.py:77:10:77:10 | ControlFlowNode for a | +| test.py:73:5:73:5 | ControlFlowNode for a | test.py:77:10:77:10 | ControlFlowNode for a | +| test.py:73:5:73:5 | ControlFlowNode for a [Attribute obj, Attribute foo] | test.py:75:5:75:5 | ControlFlowNode for a [Attribute obj, Attribute foo] | +| test.py:73:5:73:5 | ControlFlowNode for a [Attribute obj, Attribute foo] | test.py:77:10:77:10 | ControlFlowNode for a [Attribute obj, Attribute foo] | +| test.py:73:5:73:5 | ControlFlowNode for a [Attribute obj] | test.py:75:5:75:5 | ControlFlowNode for a [Attribute obj] | +| test.py:73:5:73:5 | ControlFlowNode for a [Attribute obj] | test.py:77:10:77:10 | ControlFlowNode for a [Attribute obj] | | test.py:73:5:73:5 | SSA variable a | test.py:75:5:75:5 | ControlFlowNode for a | | test.py:73:5:73:5 | SSA variable a | test.py:75:5:75:5 | ControlFlowNode for a | | test.py:73:5:73:5 | SSA variable a | test.py:77:10:77:10 | ControlFlowNode for a | | test.py:73:5:73:5 | SSA variable a | test.py:77:10:77:10 | ControlFlowNode for a | -| test.py:73:5:73:5 | SSA variable a [Attribute obj, Attribute foo] | test.py:75:5:75:5 | ControlFlowNode for a [Attribute obj, Attribute foo] | -| test.py:73:5:73:5 | SSA variable a [Attribute obj, Attribute foo] | test.py:77:10:77:10 | ControlFlowNode for a [Attribute obj, Attribute foo] | -| test.py:73:5:73:5 | SSA variable a [Attribute obj] | test.py:75:5:75:5 | ControlFlowNode for a [Attribute obj] | -| test.py:73:5:73:5 | SSA variable a [Attribute obj] | test.py:77:10:77:10 | ControlFlowNode for a [Attribute obj] | -| test.py:73:9:73:19 | ControlFlowNode for NestedObj() | test.py:73:5:73:5 | SSA variable a | -| test.py:73:9:73:19 | ControlFlowNode for NestedObj() | test.py:73:5:73:5 | SSA variable a | +| test.py:73:9:73:19 | ControlFlowNode for NestedObj() | test.py:73:5:73:5 | ControlFlowNode for a | +| test.py:73:9:73:19 | ControlFlowNode for NestedObj() | test.py:73:5:73:5 | ControlFlowNode for a | | test.py:73:9:73:19 | ControlFlowNode for NestedObj() | test.py:75:5:75:5 | ControlFlowNode for a | | test.py:73:9:73:19 | ControlFlowNode for NestedObj() | test.py:75:5:75:5 | ControlFlowNode for a | | test.py:73:9:73:19 | ControlFlowNode for NestedObj() | test.py:77:10:77:10 | ControlFlowNode for a | | test.py:73:9:73:19 | ControlFlowNode for NestedObj() | test.py:77:10:77:10 | ControlFlowNode for a | -| test.py:73:9:73:19 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | test.py:73:5:73:5 | SSA variable a [Attribute obj, Attribute foo] | +| test.py:73:9:73:19 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | test.py:73:5:73:5 | ControlFlowNode for a [Attribute obj, Attribute foo] | | test.py:73:9:73:19 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | test.py:75:5:75:5 | ControlFlowNode for a [Attribute obj, Attribute foo] | | test.py:73:9:73:19 | ControlFlowNode for NestedObj() [Attribute obj, Attribute foo] | test.py:77:10:77:10 | ControlFlowNode for a [Attribute obj, Attribute foo] | -| test.py:73:9:73:19 | ControlFlowNode for NestedObj() [Attribute obj] | test.py:73:5:73:5 | SSA variable a [Attribute obj] | +| test.py:73:9:73:19 | ControlFlowNode for NestedObj() [Attribute obj] | test.py:73:5:73:5 | ControlFlowNode for a [Attribute obj] | | test.py:73:9:73:19 | ControlFlowNode for NestedObj() [Attribute obj] | test.py:75:5:75:5 | ControlFlowNode for a [Attribute obj] | | test.py:73:9:73:19 | ControlFlowNode for NestedObj() [Attribute obj] | test.py:77:10:77:10 | ControlFlowNode for a [Attribute obj] | | test.py:73:9:73:19 | [pre objCreate] ControlFlowNode for NestedObj() | test.py:34:18:34:21 | ControlFlowNode for self | @@ -1135,6 +1188,8 @@ | test.py:77:10:77:14 | ControlFlowNode for Attribute [Attribute foo] | test.py:77:10:77:18 | ControlFlowNode for Attribute | | test.py:77:10:77:18 | ControlFlowNode for Attribute | test.py:10:10:10:10 | ControlFlowNode for x | | test.py:77:10:77:18 | ControlFlowNode for Attribute | test.py:10:10:10:10 | ControlFlowNode for x | +| test.py:80:1:80:20 | ControlFlowNode for FunctionExpr | test.py:80:5:80:17 | ControlFlowNode for test_example3 | +| test.py:80:1:80:20 | ControlFlowNode for FunctionExpr | test.py:80:5:80:17 | ControlFlowNode for test_example3 | | test.py:80:1:80:20 | ControlFlowNode for FunctionExpr | test.py:80:5:80:17 | GSSA Variable test_example3 | | test.py:80:1:80:20 | ControlFlowNode for FunctionExpr | test.py:80:5:80:17 | GSSA Variable test_example3 | | test.py:80:1:80:20 | GSSA Variable MyObj | test.py:81:11:81:15 | ControlFlowNode for MyObj | @@ -1143,14 +1198,18 @@ | test.py:80:1:80:20 | GSSA Variable SINK | test.py:82:5:82:8 | ControlFlowNode for SINK | | test.py:80:1:80:20 | GSSA Variable SOURCE | test.py:81:17:81:22 | ControlFlowNode for SOURCE | | test.py:80:1:80:20 | GSSA Variable SOURCE | test.py:81:17:81:22 | ControlFlowNode for SOURCE | +| test.py:80:5:80:17 | ControlFlowNode for test_example3 | test.py:80:5:80:17 | GSSA Variable test_example3 | +| test.py:80:5:80:17 | ControlFlowNode for test_example3 | test.py:80:5:80:17 | GSSA Variable test_example3 | +| test.py:81:5:81:7 | ControlFlowNode for obj | test.py:82:10:82:12 | ControlFlowNode for obj | +| test.py:81:5:81:7 | ControlFlowNode for obj | test.py:82:10:82:12 | ControlFlowNode for obj | +| test.py:81:5:81:7 | ControlFlowNode for obj [Attribute foo] | test.py:82:10:82:12 | ControlFlowNode for obj [Attribute foo] | | test.py:81:5:81:7 | SSA variable obj | test.py:82:10:82:12 | ControlFlowNode for obj | | test.py:81:5:81:7 | SSA variable obj | test.py:82:10:82:12 | ControlFlowNode for obj | -| test.py:81:5:81:7 | SSA variable obj [Attribute foo] | test.py:82:10:82:12 | ControlFlowNode for obj [Attribute foo] | -| test.py:81:11:81:23 | ControlFlowNode for MyObj() | test.py:81:5:81:7 | SSA variable obj | -| test.py:81:11:81:23 | ControlFlowNode for MyObj() | test.py:81:5:81:7 | SSA variable obj | +| test.py:81:11:81:23 | ControlFlowNode for MyObj() | test.py:81:5:81:7 | ControlFlowNode for obj | +| test.py:81:11:81:23 | ControlFlowNode for MyObj() | test.py:81:5:81:7 | ControlFlowNode for obj | | test.py:81:11:81:23 | ControlFlowNode for MyObj() | test.py:82:10:82:12 | ControlFlowNode for obj | | test.py:81:11:81:23 | ControlFlowNode for MyObj() | test.py:82:10:82:12 | ControlFlowNode for obj | -| test.py:81:11:81:23 | ControlFlowNode for MyObj() [Attribute foo] | test.py:81:5:81:7 | SSA variable obj [Attribute foo] | +| test.py:81:11:81:23 | ControlFlowNode for MyObj() [Attribute foo] | test.py:81:5:81:7 | ControlFlowNode for obj [Attribute foo] | | test.py:81:11:81:23 | ControlFlowNode for MyObj() [Attribute foo] | test.py:82:10:82:12 | ControlFlowNode for obj [Attribute foo] | | test.py:81:11:81:23 | [pre objCreate] ControlFlowNode for MyObj() | test.py:26:18:26:21 | ControlFlowNode for self | | test.py:81:11:81:23 | [pre objCreate] ControlFlowNode for MyObj() | test.py:26:18:26:21 | ControlFlowNode for self | @@ -1161,6 +1220,8 @@ | test.py:82:10:82:12 | ControlFlowNode for obj [Attribute foo] | test.py:82:10:82:16 | ControlFlowNode for Attribute | | test.py:82:10:82:16 | ControlFlowNode for Attribute | test.py:10:10:10:10 | ControlFlowNode for x | | test.py:82:10:82:16 | ControlFlowNode for Attribute | test.py:10:10:10:10 | ControlFlowNode for x | +| test.py:85:1:85:23 | ControlFlowNode for FunctionExpr | test.py:85:5:85:20 | ControlFlowNode for test_example3_kw | +| test.py:85:1:85:23 | ControlFlowNode for FunctionExpr | test.py:85:5:85:20 | ControlFlowNode for test_example3_kw | | test.py:85:1:85:23 | ControlFlowNode for FunctionExpr | test.py:85:5:85:20 | GSSA Variable test_example3_kw | | test.py:85:1:85:23 | ControlFlowNode for FunctionExpr | test.py:85:5:85:20 | GSSA Variable test_example3_kw | | test.py:85:1:85:23 | GSSA Variable MyObj | test.py:86:11:86:15 | ControlFlowNode for MyObj | @@ -1169,14 +1230,18 @@ | test.py:85:1:85:23 | GSSA Variable SINK | test.py:87:5:87:8 | ControlFlowNode for SINK | | test.py:85:1:85:23 | GSSA Variable SOURCE | test.py:86:21:86:26 | ControlFlowNode for SOURCE | | test.py:85:1:85:23 | GSSA Variable SOURCE | test.py:86:21:86:26 | ControlFlowNode for SOURCE | +| test.py:85:5:85:20 | ControlFlowNode for test_example3_kw | test.py:85:5:85:20 | GSSA Variable test_example3_kw | +| test.py:85:5:85:20 | ControlFlowNode for test_example3_kw | test.py:85:5:85:20 | GSSA Variable test_example3_kw | +| test.py:86:5:86:7 | ControlFlowNode for obj | test.py:87:10:87:12 | ControlFlowNode for obj | +| test.py:86:5:86:7 | ControlFlowNode for obj | test.py:87:10:87:12 | ControlFlowNode for obj | +| test.py:86:5:86:7 | ControlFlowNode for obj [Attribute foo] | test.py:87:10:87:12 | ControlFlowNode for obj [Attribute foo] | | test.py:86:5:86:7 | SSA variable obj | test.py:87:10:87:12 | ControlFlowNode for obj | | test.py:86:5:86:7 | SSA variable obj | test.py:87:10:87:12 | ControlFlowNode for obj | -| test.py:86:5:86:7 | SSA variable obj [Attribute foo] | test.py:87:10:87:12 | ControlFlowNode for obj [Attribute foo] | -| test.py:86:11:86:27 | ControlFlowNode for MyObj() | test.py:86:5:86:7 | SSA variable obj | -| test.py:86:11:86:27 | ControlFlowNode for MyObj() | test.py:86:5:86:7 | SSA variable obj | +| test.py:86:11:86:27 | ControlFlowNode for MyObj() | test.py:86:5:86:7 | ControlFlowNode for obj | +| test.py:86:11:86:27 | ControlFlowNode for MyObj() | test.py:86:5:86:7 | ControlFlowNode for obj | | test.py:86:11:86:27 | ControlFlowNode for MyObj() | test.py:87:10:87:12 | ControlFlowNode for obj | | test.py:86:11:86:27 | ControlFlowNode for MyObj() | test.py:87:10:87:12 | ControlFlowNode for obj | -| test.py:86:11:86:27 | ControlFlowNode for MyObj() [Attribute foo] | test.py:86:5:86:7 | SSA variable obj [Attribute foo] | +| test.py:86:11:86:27 | ControlFlowNode for MyObj() [Attribute foo] | test.py:86:5:86:7 | ControlFlowNode for obj [Attribute foo] | | test.py:86:11:86:27 | ControlFlowNode for MyObj() [Attribute foo] | test.py:87:10:87:12 | ControlFlowNode for obj [Attribute foo] | | test.py:86:11:86:27 | [pre objCreate] ControlFlowNode for MyObj() | test.py:26:18:26:21 | ControlFlowNode for self | | test.py:86:11:86:27 | [pre objCreate] ControlFlowNode for MyObj() | test.py:26:18:26:21 | ControlFlowNode for self | @@ -1187,34 +1252,34 @@ | test.py:87:10:87:12 | ControlFlowNode for obj [Attribute foo] | test.py:87:10:87:16 | ControlFlowNode for Attribute | | test.py:87:10:87:16 | ControlFlowNode for Attribute | test.py:10:10:10:10 | ControlFlowNode for x | | test.py:87:10:87:16 | ControlFlowNode for Attribute | test.py:10:10:10:10 | ControlFlowNode for x | +| test.py:90:1:90:30 | ControlFlowNode for FunctionExpr | test.py:90:5:90:26 | ControlFlowNode for fields_with_local_flow | +| test.py:90:1:90:30 | ControlFlowNode for FunctionExpr | test.py:90:5:90:26 | ControlFlowNode for fields_with_local_flow | | test.py:90:1:90:30 | ControlFlowNode for FunctionExpr | test.py:90:5:90:26 | GSSA Variable fields_with_local_flow | | test.py:90:1:90:30 | ControlFlowNode for FunctionExpr | test.py:90:5:90:26 | GSSA Variable fields_with_local_flow | | test.py:90:1:90:30 | GSSA Variable MyObj | test.py:91:11:91:15 | ControlFlowNode for MyObj | | test.py:90:1:90:30 | GSSA Variable MyObj | test.py:91:11:91:15 | ControlFlowNode for MyObj | +| test.py:90:5:90:26 | ControlFlowNode for fields_with_local_flow | test.py:90:5:90:26 | GSSA Variable fields_with_local_flow | +| test.py:90:5:90:26 | ControlFlowNode for fields_with_local_flow | test.py:90:5:90:26 | GSSA Variable fields_with_local_flow | | test.py:90:5:90:26 | GSSA Variable fields_with_local_flow | test.py:0:0:0:0 | ModuleVariableNode for Global Variable fields_with_local_flow in Module test | | test.py:90:5:90:26 | GSSA Variable fields_with_local_flow | test.py:0:0:0:0 | ModuleVariableNode for Global Variable fields_with_local_flow in Module test | -| test.py:90:28:90:28 | ControlFlowNode for x | test.py:90:28:90:28 | SSA variable x | -| test.py:90:28:90:28 | ControlFlowNode for x | test.py:90:28:90:28 | SSA variable x | -| test.py:90:28:90:28 | ControlFlowNode for x | test.py:90:28:90:28 | SSA variable x | -| test.py:90:28:90:28 | ControlFlowNode for x | test.py:90:28:90:28 | SSA variable x | | test.py:90:28:90:28 | ControlFlowNode for x | test.py:91:17:91:17 | ControlFlowNode for x | | test.py:90:28:90:28 | ControlFlowNode for x | test.py:91:17:91:17 | ControlFlowNode for x | | test.py:90:28:90:28 | ControlFlowNode for x | test.py:91:17:91:17 | ControlFlowNode for x | | test.py:90:28:90:28 | ControlFlowNode for x | test.py:91:17:91:17 | ControlFlowNode for x | | test.py:90:28:90:28 | SSA variable x | test.py:91:17:91:17 | ControlFlowNode for x | | test.py:90:28:90:28 | SSA variable x | test.py:91:17:91:17 | ControlFlowNode for x | -| test.py:90:28:90:28 | SSA variable x | test.py:91:17:91:17 | ControlFlowNode for x | -| test.py:90:28:90:28 | SSA variable x | test.py:91:17:91:17 | ControlFlowNode for x | +| test.py:91:5:91:7 | ControlFlowNode for obj | test.py:92:9:92:11 | ControlFlowNode for obj | +| test.py:91:5:91:7 | ControlFlowNode for obj | test.py:92:9:92:11 | ControlFlowNode for obj | +| test.py:91:5:91:7 | ControlFlowNode for obj [Attribute foo] | test.py:92:9:92:11 | ControlFlowNode for obj [Attribute foo] | +| test.py:91:5:91:7 | ControlFlowNode for obj [Attribute foo] | test.py:92:9:92:11 | ControlFlowNode for obj [Attribute foo] | | test.py:91:5:91:7 | SSA variable obj | test.py:92:9:92:11 | ControlFlowNode for obj | | test.py:91:5:91:7 | SSA variable obj | test.py:92:9:92:11 | ControlFlowNode for obj | -| test.py:91:5:91:7 | SSA variable obj [Attribute foo] | test.py:92:9:92:11 | ControlFlowNode for obj [Attribute foo] | -| test.py:91:5:91:7 | SSA variable obj [Attribute foo] | test.py:92:9:92:11 | ControlFlowNode for obj [Attribute foo] | -| test.py:91:11:91:18 | ControlFlowNode for MyObj() | test.py:91:5:91:7 | SSA variable obj | -| test.py:91:11:91:18 | ControlFlowNode for MyObj() | test.py:91:5:91:7 | SSA variable obj | +| test.py:91:11:91:18 | ControlFlowNode for MyObj() | test.py:91:5:91:7 | ControlFlowNode for obj | +| test.py:91:11:91:18 | ControlFlowNode for MyObj() | test.py:91:5:91:7 | ControlFlowNode for obj | | test.py:91:11:91:18 | ControlFlowNode for MyObj() | test.py:92:9:92:11 | ControlFlowNode for obj | | test.py:91:11:91:18 | ControlFlowNode for MyObj() | test.py:92:9:92:11 | ControlFlowNode for obj | -| test.py:91:11:91:18 | ControlFlowNode for MyObj() [Attribute foo] | test.py:91:5:91:7 | SSA variable obj [Attribute foo] | -| test.py:91:11:91:18 | ControlFlowNode for MyObj() [Attribute foo] | test.py:91:5:91:7 | SSA variable obj [Attribute foo] | +| test.py:91:11:91:18 | ControlFlowNode for MyObj() [Attribute foo] | test.py:91:5:91:7 | ControlFlowNode for obj [Attribute foo] | +| test.py:91:11:91:18 | ControlFlowNode for MyObj() [Attribute foo] | test.py:91:5:91:7 | ControlFlowNode for obj [Attribute foo] | | test.py:91:11:91:18 | ControlFlowNode for MyObj() [Attribute foo] | test.py:92:9:92:11 | ControlFlowNode for obj [Attribute foo] | | test.py:91:11:91:18 | ControlFlowNode for MyObj() [Attribute foo] | test.py:92:9:92:11 | ControlFlowNode for obj [Attribute foo] | | test.py:91:11:91:18 | [pre objCreate] ControlFlowNode for MyObj() | test.py:26:18:26:21 | ControlFlowNode for self | @@ -1227,24 +1292,28 @@ | test.py:91:17:91:17 | ControlFlowNode for x | test.py:91:11:91:18 | ControlFlowNode for MyObj() [Attribute foo] | | test.py:91:17:91:17 | [post arg] ControlFlowNode for x | test.py:97:33:97:38 | [post arg] ControlFlowNode for SOURCE | | test.py:91:17:91:17 | [post arg] ControlFlowNode for x | test.py:97:33:97:38 | [post arg] ControlFlowNode for SOURCE | -| test.py:92:5:92:5 | SSA variable a | test.py:93:12:93:12 | ControlFlowNode for a | -| test.py:92:5:92:5 | SSA variable a | test.py:93:12:93:12 | ControlFlowNode for a | +| test.py:92:5:92:5 | ControlFlowNode for a | test.py:93:12:93:12 | ControlFlowNode for a | +| test.py:92:5:92:5 | ControlFlowNode for a | test.py:93:12:93:12 | ControlFlowNode for a | +| test.py:92:5:92:5 | ControlFlowNode for a | test.py:93:12:93:12 | ControlFlowNode for a | +| test.py:92:5:92:5 | ControlFlowNode for a | test.py:93:12:93:12 | ControlFlowNode for a | | test.py:92:5:92:5 | SSA variable a | test.py:93:12:93:12 | ControlFlowNode for a | | test.py:92:5:92:5 | SSA variable a | test.py:93:12:93:12 | ControlFlowNode for a | | test.py:92:9:92:11 | ControlFlowNode for obj [Attribute foo] | test.py:92:9:92:15 | ControlFlowNode for Attribute | | test.py:92:9:92:11 | ControlFlowNode for obj [Attribute foo] | test.py:92:9:92:15 | ControlFlowNode for Attribute | | test.py:92:9:92:11 | ControlFlowNode for obj [Attribute foo] | test.py:92:9:92:15 | ControlFlowNode for Attribute | | test.py:92:9:92:11 | ControlFlowNode for obj [Attribute foo] | test.py:92:9:92:15 | ControlFlowNode for Attribute | -| test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:92:5:92:5 | SSA variable a | -| test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:92:5:92:5 | SSA variable a | -| test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:92:5:92:5 | SSA variable a | -| test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:92:5:92:5 | SSA variable a | +| test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:92:5:92:5 | ControlFlowNode for a | +| test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:92:5:92:5 | ControlFlowNode for a | +| test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:92:5:92:5 | ControlFlowNode for a | +| test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:92:5:92:5 | ControlFlowNode for a | | test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:93:12:93:12 | ControlFlowNode for a | | test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:93:12:93:12 | ControlFlowNode for a | | test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:93:12:93:12 | ControlFlowNode for a | | test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:93:12:93:12 | ControlFlowNode for a | | test.py:93:12:93:12 | ControlFlowNode for a | test.py:97:10:97:39 | ControlFlowNode for fields_with_local_flow() | | test.py:93:12:93:12 | ControlFlowNode for a | test.py:97:10:97:39 | ControlFlowNode for fields_with_local_flow() | +| test.py:96:1:96:18 | ControlFlowNode for FunctionExpr | test.py:96:5:96:15 | ControlFlowNode for test_fields | +| test.py:96:1:96:18 | ControlFlowNode for FunctionExpr | test.py:96:5:96:15 | ControlFlowNode for test_fields | | test.py:96:1:96:18 | ControlFlowNode for FunctionExpr | test.py:96:5:96:15 | GSSA Variable test_fields | | test.py:96:1:96:18 | ControlFlowNode for FunctionExpr | test.py:96:5:96:15 | GSSA Variable test_fields | | test.py:96:1:96:18 | GSSA Variable SINK | test.py:97:5:97:8 | ControlFlowNode for SINK | @@ -1253,6 +1322,8 @@ | test.py:96:1:96:18 | GSSA Variable SOURCE | test.py:97:33:97:38 | ControlFlowNode for SOURCE | | test.py:96:1:96:18 | GSSA Variable fields_with_local_flow | test.py:97:10:97:31 | ControlFlowNode for fields_with_local_flow | | test.py:96:1:96:18 | GSSA Variable fields_with_local_flow | test.py:97:10:97:31 | ControlFlowNode for fields_with_local_flow | +| test.py:96:5:96:15 | ControlFlowNode for test_fields | test.py:96:5:96:15 | GSSA Variable test_fields | +| test.py:96:5:96:15 | ControlFlowNode for test_fields | test.py:96:5:96:15 | GSSA Variable test_fields | | test.py:97:10:97:39 | ControlFlowNode for fields_with_local_flow() | test.py:10:10:10:10 | ControlFlowNode for x | | test.py:97:10:97:39 | ControlFlowNode for fields_with_local_flow() | test.py:10:10:10:10 | ControlFlowNode for x | | test.py:97:33:97:38 | ControlFlowNode for SOURCE | test.py:90:28:90:28 | ControlFlowNode for x | diff --git a/python/ql/test/experimental/dataflow/fieldflow/localFlow.expected b/python/ql/test/experimental/dataflow/fieldflow/localFlow.expected index 512ac4d31ad5..52c19d69ffd9 100644 --- a/python/ql/test/experimental/dataflow/fieldflow/localFlow.expected +++ b/python/ql/test/experimental/dataflow/fieldflow/localFlow.expected @@ -1,14 +1,18 @@ | examples.py:53:1:53:30 | GSSA Variable MyObj | examples.py:54:11:54:15 | ControlFlowNode for MyObj | -| examples.py:53:28:53:28 | ControlFlowNode for x | examples.py:53:28:53:28 | SSA variable x | +| examples.py:53:28:53:28 | ControlFlowNode for x | examples.py:54:17:54:17 | ControlFlowNode for x | | examples.py:53:28:53:28 | SSA variable x | examples.py:54:17:54:17 | ControlFlowNode for x | +| examples.py:54:5:54:7 | ControlFlowNode for obj | examples.py:55:9:55:11 | ControlFlowNode for obj | | examples.py:54:5:54:7 | SSA variable obj | examples.py:55:9:55:11 | ControlFlowNode for obj | -| examples.py:54:11:54:18 | ControlFlowNode for MyObj() | examples.py:54:5:54:7 | SSA variable obj | +| examples.py:54:11:54:18 | ControlFlowNode for MyObj() | examples.py:54:5:54:7 | ControlFlowNode for obj | +| examples.py:55:5:55:5 | ControlFlowNode for a | examples.py:56:12:56:12 | ControlFlowNode for a | | examples.py:55:5:55:5 | SSA variable a | examples.py:56:12:56:12 | ControlFlowNode for a | -| examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:55:5:55:5 | SSA variable a | +| examples.py:55:9:55:15 | ControlFlowNode for Attribute | examples.py:55:5:55:5 | ControlFlowNode for a | | test.py:90:1:90:30 | GSSA Variable MyObj | test.py:91:11:91:15 | ControlFlowNode for MyObj | -| test.py:90:28:90:28 | ControlFlowNode for x | test.py:90:28:90:28 | SSA variable x | +| test.py:90:28:90:28 | ControlFlowNode for x | test.py:91:17:91:17 | ControlFlowNode for x | | test.py:90:28:90:28 | SSA variable x | test.py:91:17:91:17 | ControlFlowNode for x | +| test.py:91:5:91:7 | ControlFlowNode for obj | test.py:92:9:92:11 | ControlFlowNode for obj | | test.py:91:5:91:7 | SSA variable obj | test.py:92:9:92:11 | ControlFlowNode for obj | -| test.py:91:11:91:18 | ControlFlowNode for MyObj() | test.py:91:5:91:7 | SSA variable obj | +| test.py:91:11:91:18 | ControlFlowNode for MyObj() | test.py:91:5:91:7 | ControlFlowNode for obj | +| test.py:92:5:92:5 | ControlFlowNode for a | test.py:93:12:93:12 | ControlFlowNode for a | | test.py:92:5:92:5 | SSA variable a | test.py:93:12:93:12 | ControlFlowNode for a | -| test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:92:5:92:5 | SSA variable a | +| test.py:92:9:92:15 | ControlFlowNode for Attribute | test.py:92:5:92:5 | ControlFlowNode for a | diff --git a/python/ql/test/experimental/dataflow/tainttracking/basic/LocalTaintStep.expected b/python/ql/test/experimental/dataflow/tainttracking/basic/LocalTaintStep.expected index 3b3f18c5b9e8..8bbe4c7c6711 100644 --- a/python/ql/test/experimental/dataflow/tainttracking/basic/LocalTaintStep.expected +++ b/python/ql/test/experimental/dataflow/tainttracking/basic/LocalTaintStep.expected @@ -1,5 +1,8 @@ +| test.py:3:1:3:7 | ControlFlowNode for tainted | test.py:3:1:3:7 | GSSA Variable tainted | | test.py:3:1:3:7 | GSSA Variable tainted | test.py:4:6:4:12 | ControlFlowNode for tainted | -| test.py:3:11:3:16 | ControlFlowNode for SOURCE | test.py:3:1:3:7 | GSSA Variable tainted | -| test.py:6:1:6:11 | ControlFlowNode for FunctionExpr | test.py:6:5:6:8 | GSSA Variable func | +| test.py:3:11:3:16 | ControlFlowNode for SOURCE | test.py:3:1:3:7 | ControlFlowNode for tainted | +| test.py:6:1:6:11 | ControlFlowNode for FunctionExpr | test.py:6:5:6:8 | ControlFlowNode for func | +| test.py:6:5:6:8 | ControlFlowNode for func | test.py:6:5:6:8 | GSSA Variable func | +| test.py:7:5:7:16 | ControlFlowNode for also_tainted | test.py:8:10:8:21 | ControlFlowNode for also_tainted | | test.py:7:5:7:16 | SSA variable also_tainted | test.py:8:10:8:21 | ControlFlowNode for also_tainted | -| test.py:7:20:7:25 | ControlFlowNode for SOURCE | test.py:7:5:7:16 | SSA variable also_tainted | +| test.py:7:20:7:25 | ControlFlowNode for SOURCE | test.py:7:5:7:16 | ControlFlowNode for also_tainted | diff --git a/python/ql/test/experimental/dataflow/typetracking/moduleattr.expected b/python/ql/test/experimental/dataflow/typetracking/moduleattr.expected index adfc8c5a3795..1cb43b51c84c 100644 --- a/python/ql/test/experimental/dataflow/typetracking/moduleattr.expected +++ b/python/ql/test/experimental/dataflow/typetracking/moduleattr.expected @@ -3,8 +3,10 @@ module_tracker module_attr_tracker | import_as_attr.py:0:0:0:0 | ModuleVariableNode for Global Variable attr_ref in Module import_as_attr | | import_as_attr.py:1:20:1:35 | ControlFlowNode for ImportMember | +| import_as_attr.py:1:28:1:35 | ControlFlowNode for attr_ref | | import_as_attr.py:1:28:1:35 | GSSA Variable attr_ref | +| import_as_attr.py:3:1:3:1 | ControlFlowNode for x | | import_as_attr.py:3:1:3:1 | GSSA Variable x | | import_as_attr.py:3:5:3:12 | ControlFlowNode for attr_ref | -| import_as_attr.py:6:5:6:5 | SSA variable y | +| import_as_attr.py:6:5:6:5 | ControlFlowNode for y | | import_as_attr.py:6:9:6:16 | ControlFlowNode for attr_ref | diff --git a/python/ql/test/experimental/library-tests/frameworks/modeling-example/ProperModel.expected b/python/ql/test/experimental/library-tests/frameworks/modeling-example/ProperModel.expected index 9c6f6ad30c1f..bbc5056d6a64 100644 --- a/python/ql/test/experimental/library-tests/frameworks/modeling-example/ProperModel.expected +++ b/python/ql/test/experimental/library-tests/frameworks/modeling-example/ProperModel.expected @@ -1,60 +1,60 @@ edges | test.py:21:11:21:18 | ControlFlowNode for source() | test.py:22:10:22:24 | ControlFlowNode for Attribute() | | test.py:29:11:29:18 | ControlFlowNode for source() | test.py:33:10:33:12 | ControlFlowNode for val | -| test.py:39:15:39:17 | SSA variable arg | test.py:41:10:41:12 | ControlFlowNode for val | +| test.py:39:15:39:17 | ControlFlowNode for arg | test.py:41:10:41:12 | ControlFlowNode for val | | test.py:45:11:45:18 | ControlFlowNode for source() | test.py:46:15:46:17 | ControlFlowNode for src | -| test.py:46:15:46:17 | ControlFlowNode for src | test.py:39:15:39:17 | SSA variable arg | -| test.py:52:24:52:26 | SSA variable arg | test.py:54:10:54:12 | ControlFlowNode for val | -| test.py:57:33:57:35 | SSA variable arg | test.py:58:24:58:26 | ControlFlowNode for arg | -| test.py:58:24:58:26 | ControlFlowNode for arg | test.py:52:24:52:26 | SSA variable arg | -| test.py:61:33:61:35 | SSA variable arg | test.py:62:33:62:35 | ControlFlowNode for arg | -| test.py:62:33:62:35 | ControlFlowNode for arg | test.py:57:33:57:35 | SSA variable arg | -| test.py:65:33:65:35 | SSA variable arg | test.py:66:33:66:35 | ControlFlowNode for arg | -| test.py:66:33:66:35 | ControlFlowNode for arg | test.py:61:33:61:35 | SSA variable arg | +| test.py:46:15:46:17 | ControlFlowNode for src | test.py:39:15:39:17 | ControlFlowNode for arg | +| test.py:52:24:52:26 | ControlFlowNode for arg | test.py:54:10:54:12 | ControlFlowNode for val | +| test.py:57:33:57:35 | ControlFlowNode for arg | test.py:58:24:58:26 | ControlFlowNode for arg | +| test.py:58:24:58:26 | ControlFlowNode for arg | test.py:52:24:52:26 | ControlFlowNode for arg | +| test.py:61:33:61:35 | ControlFlowNode for arg | test.py:62:33:62:35 | ControlFlowNode for arg | +| test.py:62:33:62:35 | ControlFlowNode for arg | test.py:57:33:57:35 | ControlFlowNode for arg | +| test.py:65:33:65:35 | ControlFlowNode for arg | test.py:66:33:66:35 | ControlFlowNode for arg | +| test.py:66:33:66:35 | ControlFlowNode for arg | test.py:61:33:61:35 | ControlFlowNode for arg | | test.py:70:11:70:18 | ControlFlowNode for source() | test.py:71:33:71:35 | ControlFlowNode for src | -| test.py:71:33:71:35 | ControlFlowNode for src | test.py:65:33:65:35 | SSA variable arg | -| test.py:77:23:77:24 | SSA variable bm | test.py:79:10:79:12 | ControlFlowNode for val | +| test.py:71:33:71:35 | ControlFlowNode for src | test.py:65:33:65:35 | ControlFlowNode for arg | +| test.py:77:23:77:24 | ControlFlowNode for bm | test.py:79:10:79:12 | ControlFlowNode for val | | test.py:83:11:83:18 | ControlFlowNode for source() | test.py:84:23:84:35 | ControlFlowNode for Attribute | -| test.py:84:23:84:35 | ControlFlowNode for Attribute | test.py:77:23:77:24 | SSA variable bm | -| test.py:89:37:89:38 | SSA variable bm | test.py:91:10:91:12 | ControlFlowNode for val | -| test.py:94:46:94:47 | SSA variable bm | test.py:95:37:95:38 | ControlFlowNode for bm | -| test.py:95:37:95:38 | ControlFlowNode for bm | test.py:89:37:89:38 | SSA variable bm | -| test.py:98:46:98:47 | SSA variable bm | test.py:99:46:99:47 | ControlFlowNode for bm | -| test.py:99:46:99:47 | ControlFlowNode for bm | test.py:94:46:94:47 | SSA variable bm | -| test.py:102:46:102:47 | SSA variable bm | test.py:103:46:103:47 | ControlFlowNode for bm | -| test.py:103:46:103:47 | ControlFlowNode for bm | test.py:98:46:98:47 | SSA variable bm | +| test.py:84:23:84:35 | ControlFlowNode for Attribute | test.py:77:23:77:24 | ControlFlowNode for bm | +| test.py:89:37:89:38 | ControlFlowNode for bm | test.py:91:10:91:12 | ControlFlowNode for val | +| test.py:94:46:94:47 | ControlFlowNode for bm | test.py:95:37:95:38 | ControlFlowNode for bm | +| test.py:95:37:95:38 | ControlFlowNode for bm | test.py:89:37:89:38 | ControlFlowNode for bm | +| test.py:98:46:98:47 | ControlFlowNode for bm | test.py:99:46:99:47 | ControlFlowNode for bm | +| test.py:99:46:99:47 | ControlFlowNode for bm | test.py:94:46:94:47 | ControlFlowNode for bm | +| test.py:102:46:102:47 | ControlFlowNode for bm | test.py:103:46:103:47 | ControlFlowNode for bm | +| test.py:103:46:103:47 | ControlFlowNode for bm | test.py:98:46:98:47 | ControlFlowNode for bm | | test.py:107:11:107:18 | ControlFlowNode for source() | test.py:108:46:108:58 | ControlFlowNode for Attribute | -| test.py:108:46:108:58 | ControlFlowNode for Attribute | test.py:102:46:102:47 | SSA variable bm | +| test.py:108:46:108:58 | ControlFlowNode for Attribute | test.py:102:46:102:47 | ControlFlowNode for bm | nodes | test.py:21:11:21:18 | ControlFlowNode for source() | semmle.label | ControlFlowNode for source() | | test.py:22:10:22:24 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:29:11:29:18 | ControlFlowNode for source() | semmle.label | ControlFlowNode for source() | | test.py:33:10:33:12 | ControlFlowNode for val | semmle.label | ControlFlowNode for val | -| test.py:39:15:39:17 | SSA variable arg | semmle.label | SSA variable arg | +| test.py:39:15:39:17 | ControlFlowNode for arg | semmle.label | ControlFlowNode for arg | | test.py:41:10:41:12 | ControlFlowNode for val | semmle.label | ControlFlowNode for val | | test.py:45:11:45:18 | ControlFlowNode for source() | semmle.label | ControlFlowNode for source() | | test.py:46:15:46:17 | ControlFlowNode for src | semmle.label | ControlFlowNode for src | -| test.py:52:24:52:26 | SSA variable arg | semmle.label | SSA variable arg | +| test.py:52:24:52:26 | ControlFlowNode for arg | semmle.label | ControlFlowNode for arg | | test.py:54:10:54:12 | ControlFlowNode for val | semmle.label | ControlFlowNode for val | -| test.py:57:33:57:35 | SSA variable arg | semmle.label | SSA variable arg | +| test.py:57:33:57:35 | ControlFlowNode for arg | semmle.label | ControlFlowNode for arg | | test.py:58:24:58:26 | ControlFlowNode for arg | semmle.label | ControlFlowNode for arg | -| test.py:61:33:61:35 | SSA variable arg | semmle.label | SSA variable arg | +| test.py:61:33:61:35 | ControlFlowNode for arg | semmle.label | ControlFlowNode for arg | | test.py:62:33:62:35 | ControlFlowNode for arg | semmle.label | ControlFlowNode for arg | -| test.py:65:33:65:35 | SSA variable arg | semmle.label | SSA variable arg | +| test.py:65:33:65:35 | ControlFlowNode for arg | semmle.label | ControlFlowNode for arg | | test.py:66:33:66:35 | ControlFlowNode for arg | semmle.label | ControlFlowNode for arg | | test.py:70:11:70:18 | ControlFlowNode for source() | semmle.label | ControlFlowNode for source() | | test.py:71:33:71:35 | ControlFlowNode for src | semmle.label | ControlFlowNode for src | -| test.py:77:23:77:24 | SSA variable bm | semmle.label | SSA variable bm | +| test.py:77:23:77:24 | ControlFlowNode for bm | semmle.label | ControlFlowNode for bm | | test.py:79:10:79:12 | ControlFlowNode for val | semmle.label | ControlFlowNode for val | | test.py:83:11:83:18 | ControlFlowNode for source() | semmle.label | ControlFlowNode for source() | | test.py:84:23:84:35 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| test.py:89:37:89:38 | SSA variable bm | semmle.label | SSA variable bm | +| test.py:89:37:89:38 | ControlFlowNode for bm | semmle.label | ControlFlowNode for bm | | test.py:91:10:91:12 | ControlFlowNode for val | semmle.label | ControlFlowNode for val | -| test.py:94:46:94:47 | SSA variable bm | semmle.label | SSA variable bm | +| test.py:94:46:94:47 | ControlFlowNode for bm | semmle.label | ControlFlowNode for bm | | test.py:95:37:95:38 | ControlFlowNode for bm | semmle.label | ControlFlowNode for bm | -| test.py:98:46:98:47 | SSA variable bm | semmle.label | SSA variable bm | +| test.py:98:46:98:47 | ControlFlowNode for bm | semmle.label | ControlFlowNode for bm | | test.py:99:46:99:47 | ControlFlowNode for bm | semmle.label | ControlFlowNode for bm | -| test.py:102:46:102:47 | SSA variable bm | semmle.label | SSA variable bm | +| test.py:102:46:102:47 | ControlFlowNode for bm | semmle.label | ControlFlowNode for bm | | test.py:103:46:103:47 | ControlFlowNode for bm | semmle.label | ControlFlowNode for bm | | test.py:107:11:107:18 | ControlFlowNode for source() | semmle.label | ControlFlowNode for source() | | test.py:108:46:108:58 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | diff --git a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected index 46b6ea0a406c..811d7f201096 100644 --- a/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-022-PathInjection/PathInjection.expected @@ -12,29 +12,29 @@ edges | test.py:9:12:9:39 | ControlFlowNode for Attribute() | test.py:31:9:31:16 | ControlFlowNode for source() | | test.py:9:12:9:39 | ControlFlowNode for Attribute() | test.py:38:9:38:16 | ControlFlowNode for source() | | test.py:9:12:9:39 | ControlFlowNode for Attribute() | test.py:46:9:46:16 | ControlFlowNode for source() | -| test.py:12:15:12:15 | SSA variable x | test.py:13:12:13:30 | ControlFlowNode for Attribute() | +| test.py:12:15:12:15 | ControlFlowNode for x | test.py:13:12:13:30 | ControlFlowNode for Attribute() | | test.py:13:12:13:30 | ControlFlowNode for Attribute() | test.py:25:9:25:20 | ControlFlowNode for normalize() | | test.py:13:12:13:30 | ControlFlowNode for Attribute() | test.py:48:13:48:24 | ControlFlowNode for normalize() | | test.py:18:9:18:16 | ControlFlowNode for source() | test.py:19:10:19:10 | ControlFlowNode for x | | test.py:24:9:24:16 | ControlFlowNode for source() | test.py:25:19:25:19 | ControlFlowNode for x | | test.py:25:9:25:20 | ControlFlowNode for normalize() | test.py:26:10:26:10 | ControlFlowNode for y | -| test.py:25:19:25:19 | ControlFlowNode for x | test.py:12:15:12:15 | SSA variable x | +| test.py:25:19:25:19 | ControlFlowNode for x | test.py:12:15:12:15 | ControlFlowNode for x | | test.py:31:9:31:16 | ControlFlowNode for source() | test.py:33:14:33:14 | ControlFlowNode for x | | test.py:38:9:38:16 | ControlFlowNode for source() | test.py:39:19:39:19 | ControlFlowNode for x | -| test.py:39:19:39:19 | ControlFlowNode for x | test.py:12:15:12:15 | SSA variable x | +| test.py:39:19:39:19 | ControlFlowNode for x | test.py:12:15:12:15 | ControlFlowNode for x | | test.py:46:9:46:16 | ControlFlowNode for source() | test.py:48:23:48:23 | ControlFlowNode for x | | test.py:48:13:48:24 | ControlFlowNode for normalize() | test.py:49:14:49:14 | ControlFlowNode for y | -| test.py:48:23:48:23 | ControlFlowNode for x | test.py:12:15:12:15 | SSA variable x | +| test.py:48:23:48:23 | ControlFlowNode for x | test.py:12:15:12:15 | ControlFlowNode for x | | test_chaining.py:9:12:9:23 | ControlFlowNode for Attribute | test_chaining.py:9:12:9:39 | ControlFlowNode for Attribute() | | test_chaining.py:9:12:9:39 | ControlFlowNode for Attribute() | test_chaining.py:20:9:20:16 | ControlFlowNode for source() | | test_chaining.py:9:12:9:39 | ControlFlowNode for Attribute() | test_chaining.py:28:9:28:16 | ControlFlowNode for source() | | test_chaining.py:9:12:9:39 | ControlFlowNode for Attribute() | test_chaining.py:41:9:41:16 | ControlFlowNode for source() | -| test_chaining.py:14:15:14:15 | SSA variable x | test_chaining.py:15:12:15:30 | ControlFlowNode for Attribute() | +| test_chaining.py:14:15:14:15 | ControlFlowNode for x | test_chaining.py:15:12:15:30 | ControlFlowNode for Attribute() | | test_chaining.py:15:12:15:30 | ControlFlowNode for Attribute() | test_chaining.py:31:13:31:24 | ControlFlowNode for normalize() | | test_chaining.py:20:9:20:16 | ControlFlowNode for source() | test_chaining.py:21:19:21:19 | ControlFlowNode for x | -| test_chaining.py:21:19:21:19 | ControlFlowNode for x | test_chaining.py:14:15:14:15 | SSA variable x | +| test_chaining.py:21:19:21:19 | ControlFlowNode for x | test_chaining.py:14:15:14:15 | ControlFlowNode for x | | test_chaining.py:28:9:28:16 | ControlFlowNode for source() | test_chaining.py:29:19:29:19 | ControlFlowNode for x | -| test_chaining.py:29:19:29:19 | ControlFlowNode for x | test_chaining.py:14:15:14:15 | SSA variable x | +| test_chaining.py:29:19:29:19 | ControlFlowNode for x | test_chaining.py:14:15:14:15 | ControlFlowNode for x | | test_chaining.py:31:13:31:24 | ControlFlowNode for normalize() | test_chaining.py:32:14:32:14 | ControlFlowNode for z | | test_chaining.py:41:9:41:16 | ControlFlowNode for source() | test_chaining.py:42:9:42:19 | ControlFlowNode for normpath() | | test_chaining.py:44:13:44:23 | ControlFlowNode for normpath() | test_chaining.py:45:14:45:14 | ControlFlowNode for z | @@ -53,7 +53,7 @@ nodes | test.py:9:12:9:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | | test.py:9:12:9:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:9:12:9:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test.py:12:15:12:15 | SSA variable x | semmle.label | SSA variable x | +| test.py:12:15:12:15 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | | test.py:13:12:13:30 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test.py:18:9:18:16 | ControlFlowNode for source() | semmle.label | ControlFlowNode for source() | | test.py:19:10:19:10 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | @@ -71,7 +71,7 @@ nodes | test.py:49:14:49:14 | ControlFlowNode for y | semmle.label | ControlFlowNode for y | | test_chaining.py:9:12:9:23 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | | test_chaining.py:9:12:9:39 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| test_chaining.py:14:15:14:15 | SSA variable x | semmle.label | SSA variable x | +| test_chaining.py:14:15:14:15 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | | test_chaining.py:15:12:15:30 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | test_chaining.py:20:9:20:16 | ControlFlowNode for source() | semmle.label | ControlFlowNode for source() | | test_chaining.py:21:19:21:19 | ControlFlowNode for x | semmle.label | ControlFlowNode for x | diff --git a/python/ql/test/query-tests/Security/CWE-089/SqlInjection.expected b/python/ql/test/query-tests/Security/CWE-089/SqlInjection.expected index 29bc6d5ceedb..a133d4039fe1 100644 --- a/python/ql/test/query-tests/Security/CWE-089/SqlInjection.expected +++ b/python/ql/test/query-tests/Security/CWE-089/SqlInjection.expected @@ -1,16 +1,16 @@ edges -| sql_injection.py:14:15:14:22 | SSA variable username | sql_injection.py:21:24:21:77 | ControlFlowNode for BinaryExpr | -| sql_injection.py:14:15:14:22 | SSA variable username | sql_injection.py:24:38:24:95 | ControlFlowNode for BinaryExpr | -| sql_injection.py:14:15:14:22 | SSA variable username | sql_injection.py:25:26:25:83 | ControlFlowNode for BinaryExpr | -| sql_injection.py:14:15:14:22 | SSA variable username | sql_injection.py:26:28:26:85 | ControlFlowNode for BinaryExpr | +| sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:21:24:21:77 | ControlFlowNode for BinaryExpr | +| sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:24:38:24:95 | ControlFlowNode for BinaryExpr | +| sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:25:26:25:83 | ControlFlowNode for BinaryExpr | +| sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:26:28:26:85 | ControlFlowNode for BinaryExpr | nodes -| sql_injection.py:14:15:14:22 | SSA variable username | semmle.label | SSA variable username | +| sql_injection.py:14:15:14:22 | ControlFlowNode for username | semmle.label | ControlFlowNode for username | | sql_injection.py:21:24:21:77 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | sql_injection.py:24:38:24:95 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | sql_injection.py:25:26:25:83 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | | sql_injection.py:26:28:26:85 | ControlFlowNode for BinaryExpr | semmle.label | ControlFlowNode for BinaryExpr | #select -| sql_injection.py:21:24:21:77 | ControlFlowNode for BinaryExpr | sql_injection.py:14:15:14:22 | SSA variable username | sql_injection.py:21:24:21:77 | ControlFlowNode for BinaryExpr | This SQL query depends on $@. | sql_injection.py:14:15:14:22 | SSA variable username | a user-provided value | -| sql_injection.py:24:38:24:95 | ControlFlowNode for BinaryExpr | sql_injection.py:14:15:14:22 | SSA variable username | sql_injection.py:24:38:24:95 | ControlFlowNode for BinaryExpr | This SQL query depends on $@. | sql_injection.py:14:15:14:22 | SSA variable username | a user-provided value | -| sql_injection.py:25:26:25:83 | ControlFlowNode for BinaryExpr | sql_injection.py:14:15:14:22 | SSA variable username | sql_injection.py:25:26:25:83 | ControlFlowNode for BinaryExpr | This SQL query depends on $@. | sql_injection.py:14:15:14:22 | SSA variable username | a user-provided value | -| sql_injection.py:26:28:26:85 | ControlFlowNode for BinaryExpr | sql_injection.py:14:15:14:22 | SSA variable username | sql_injection.py:26:28:26:85 | ControlFlowNode for BinaryExpr | This SQL query depends on $@. | sql_injection.py:14:15:14:22 | SSA variable username | a user-provided value | +| sql_injection.py:21:24:21:77 | ControlFlowNode for BinaryExpr | sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:21:24:21:77 | ControlFlowNode for BinaryExpr | This SQL query depends on $@. | sql_injection.py:14:15:14:22 | ControlFlowNode for username | a user-provided value | +| sql_injection.py:24:38:24:95 | ControlFlowNode for BinaryExpr | sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:24:38:24:95 | ControlFlowNode for BinaryExpr | This SQL query depends on $@. | sql_injection.py:14:15:14:22 | ControlFlowNode for username | a user-provided value | +| sql_injection.py:25:26:25:83 | ControlFlowNode for BinaryExpr | sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:25:26:25:83 | ControlFlowNode for BinaryExpr | This SQL query depends on $@. | sql_injection.py:14:15:14:22 | ControlFlowNode for username | a user-provided value | +| sql_injection.py:26:28:26:85 | ControlFlowNode for BinaryExpr | sql_injection.py:14:15:14:22 | ControlFlowNode for username | sql_injection.py:26:28:26:85 | ControlFlowNode for BinaryExpr | This SQL query depends on $@. | sql_injection.py:14:15:14:22 | ControlFlowNode for username | a user-provided value |