Skip to content

Commit 985e87c

Browse files
committed
Python: Add variable scope example with subclass
1 parent 0e3d520 commit 985e87c

File tree

6 files changed

+38
-15
lines changed

6 files changed

+38
-15
lines changed

python/ql/test/library-tests/variables/scopes/access.expected

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
| in_class.py:0:0:0:0 | Module in_class | Global Variable MyClass | in_class.py:5:7:5:13 | MyClass |
2-
| in_class.py:0:0:0:0 | Module in_class | Global Variable MyClass | in_class.py:30:6:30:12 | MyClass |
2+
| in_class.py:0:0:0:0 | Module in_class | Global Variable MyClass | in_class.py:33:6:33:12 | MyClass |
3+
| in_class.py:0:0:0:0 | Module in_class | Global Variable MyClass | in_class.py:41:7:41:13 | MyClass |
34
| in_class.py:0:0:0:0 | Module in_class | Global Variable NameError | in_class.py:17:16:17:24 | NameError |
45
| in_class.py:0:0:0:0 | Module in_class | Global Variable bar | in_class.py:2:1:2:3 | bar |
56
| in_class.py:0:0:0:0 | Module in_class | Global Variable bar | in_class.py:14:15:14:17 | bar |
67
| in_class.py:0:0:0:0 | Module in_class | Global Variable foo | in_class.py:1:1:1:3 | foo |
7-
| in_class.py:0:0:0:0 | Module in_class | Global Variable mc | in_class.py:30:1:30:2 | mc |
8-
| in_class.py:0:0:0:0 | Module in_class | Global Variable mc | in_class.py:32:1:32:2 | mc |
9-
| in_class.py:0:0:0:0 | Module in_class | Global Variable mc | in_class.py:35:7:35:8 | mc |
8+
| in_class.py:0:0:0:0 | Module in_class | Global Variable mc | in_class.py:33:1:33:2 | mc |
9+
| in_class.py:0:0:0:0 | Module in_class | Global Variable mc | in_class.py:35:1:35:2 | mc |
10+
| in_class.py:0:0:0:0 | Module in_class | Global Variable mc | in_class.py:38:7:38:8 | mc |
1011
| in_class.py:0:0:0:0 | Module in_class | Global Variable object | in_class.py:5:15:5:20 | object |
12+
| in_class.py:0:0:0:0 | Module in_class | Global Variable object | in_class.py:30:15:30:20 | object |
1113
| in_class.py:0:0:0:0 | Module in_class | Global Variable print | in_class.py:9:9:9:13 | print |
1214
| in_class.py:0:0:0:0 | Module in_class | Global Variable print | in_class.py:12:9:12:13 | print |
1315
| in_class.py:0:0:0:0 | Module in_class | Global Variable print | in_class.py:13:9:13:13 | print |
@@ -17,15 +19,19 @@
1719
| in_class.py:0:0:0:0 | Module in_class | Global Variable print | in_class.py:21:9:21:13 | print |
1820
| in_class.py:0:0:0:0 | Module in_class | Global Variable print | in_class.py:22:9:22:13 | print |
1921
| in_class.py:0:0:0:0 | Module in_class | Global Variable print | in_class.py:25:9:25:13 | print |
20-
| in_class.py:0:0:0:0 | Module in_class | Global Variable print | in_class.py:31:1:31:5 | print |
2122
| in_class.py:0:0:0:0 | Module in_class | Global Variable print | in_class.py:34:1:34:5 | print |
22-
| in_class.py:0:0:0:0 | Module in_class | Global Variable print | in_class.py:35:1:35:5 | print |
23+
| in_class.py:0:0:0:0 | Module in_class | Global Variable print | in_class.py:37:1:37:5 | print |
24+
| in_class.py:0:0:0:0 | Module in_class | Global Variable print | in_class.py:38:1:38:5 | print |
25+
| in_class.py:0:0:0:0 | Module in_class | Global Variable print | in_class.py:40:1:40:5 | print |
26+
| in_class.py:0:0:0:0 | Module in_class | Global Variable print | in_class.py:41:1:41:5 | print |
27+
| in_class.py:5:1:5:22 | Class MyClass | Local Variable Sub | in_class.py:30:11:30:13 | Sub |
2328
| in_class.py:5:1:5:22 | Class MyClass | Local Variable baz | in_class.py:6:5:6:7 | baz |
2429
| in_class.py:5:1:5:22 | Class MyClass | Local Variable baz | in_class.py:16:19:16:21 | baz |
2530
| in_class.py:5:1:5:22 | Class MyClass | Local Variable baz | in_class.py:28:15:28:17 | baz |
2631
| in_class.py:5:1:5:22 | Class MyClass | Local Variable ex | in_class.py:28:5:28:6 | ex |
2732
| in_class.py:5:1:5:22 | Class MyClass | Local Variable foo | in_class.py:8:9:8:11 | foo |
2833
| in_class.py:5:1:5:22 | Class MyClass | Local Variable foo | in_class.py:13:15:13:17 | foo |
34+
| in_class.py:5:1:5:22 | Class MyClass | Local Variable foo | in_class.py:31:17:31:19 | foo |
2935
| in_class.py:5:1:5:22 | Class MyClass | Local Variable func | in_class.py:24:9:24:12 | func |
3036
| in_class.py:5:1:5:22 | Class MyClass | Local Variable func | in_class.py:28:10:28:13 | func |
3137
| in_class.py:5:1:5:22 | Class MyClass | Local Variable use | in_class.py:11:9:11:11 | use |
@@ -35,6 +41,7 @@
3541
| in_class.py:11:5:11:18 | Function use | Local Variable self | in_class.py:22:15:22:18 | self |
3642
| in_class.py:24:5:24:18 | Function func | Local Variable arg | in_class.py:24:14:24:16 | arg |
3743
| in_class.py:24:5:24:18 | Function func | Local Variable arg | in_class.py:25:27:25:29 | arg |
44+
| in_class.py:30:5:30:22 | Class Sub | Local Variable stuff | in_class.py:31:9:31:13 | stuff |
3845
| test.py:0:0:0:0 | Module test | Global Variable C | test.py:30:7:30:7 | C |
3946
| test.py:0:0:0:0 | Module test | Global Variable base | test.py:30:9:30:12 | base |
4047
| test.py:0:0:0:0 | Module test | Global Variable func0 | test.py:5:5:5:9 | func0 |

python/ql/test/library-tests/variables/scopes/free.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
| Local Variable baz | in_class.py:5:1:5:22 | Class MyClass | in_class.py:11:5:11:18 | Function use |
22
| Local Variable foo | in_class.py:5:1:5:22 | Class MyClass | in_class.py:11:5:11:18 | Function use |
3+
| Local Variable foo | in_class.py:5:1:5:22 | Class MyClass | in_class.py:30:5:30:22 | Class Sub |
34
| Local Variable local2 | test.py:15:1:15:12 | Function func2 | test.py:17:5:17:23 | Function inner1 |
45
| Local Variable local4 | test.py:22:1:22:26 | Function func3 | test.py:24:5:24:22 | Function inner_outer |
56
| Local Variable local4 | test.py:22:1:22:26 | Function func3 | test.py:25:9:25:27 | Function inner2 |

python/ql/test/library-tests/variables/scopes/in_class.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
foo = "foo"
2-
bar = "bar"
1+
foo = "foo-text"
2+
bar = "bar-text"
33

44

55
class MyClass(object):
@@ -10,8 +10,8 @@ def foo(self):
1010

1111
def use(self):
1212
print("! use()")
13-
print(foo)
14-
print(bar)
13+
print(foo) # foo-text
14+
print(bar) # bar-text
1515
try:
1616
print(baz)
1717
except NameError:
@@ -27,9 +27,15 @@ def func(arg):
2727

2828
ex = func(baz)
2929

30+
class Sub(object):
31+
stuff = foo
32+
3033
mc = MyClass()
3134
print()
3235
mc.use()
3336

3437
print("\n! mc.ex")
3538
print(mc.ex)
39+
40+
print("\n! MyClass.Sub.stuff")
41+
print(MyClass.Sub().stuff) # foo-text

python/ql/test/library-tests/variables/scopes/locals.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
| Local Variable .0 | test.py:48:12:48:29 | Function listcomp | fast |
33
| Local Variable .0 | test.py:52:5:52:25 | Function listcomp | fast |
44
| Local Variable Local | test.py:38:1:38:18 | Function func4 | fast |
5+
| Local Variable Sub | in_class.py:5:1:5:22 | Class MyClass | name |
56
| Local Variable arg | in_class.py:24:5:24:18 | Function func | fast |
67
| Local Variable baz | in_class.py:5:1:5:22 | Class MyClass | name |
78
| Local Variable class_local | test.py:30:1:30:14 | Class C | name |
@@ -33,6 +34,7 @@
3334
| Local Variable self | test.py:40:9:40:29 | Function meth_inner | fast |
3435
| Local Variable seq | test.py:44:1:44:15 | Function func5 | fast |
3536
| Local Variable seq | test.py:51:1:51:21 | Function use_in_loop | fast |
37+
| Local Variable stuff | in_class.py:30:5:30:22 | Class Sub | name |
3638
| Local Variable use | in_class.py:5:1:5:22 | Class MyClass | name |
3739
| Local Variable v | test.py:51:1:51:21 | Function use_in_loop | fast |
3840
| Local Variable v | test.py:52:5:52:25 | Function listcomp | fast |

python/ql/test/library-tests/variables/scopes/lookup.expected

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,17 @@
1717
| in_class.py:25:27:25:29 | ControlFlowNode for arg | local |
1818
| in_class.py:28:10:28:13 | ControlFlowNode for func | local |
1919
| in_class.py:28:15:28:17 | ControlFlowNode for baz | local |
20-
| in_class.py:30:6:30:12 | ControlFlowNode for MyClass | global |
21-
| in_class.py:31:1:31:5 | ControlFlowNode for print | global |
22-
| in_class.py:32:1:32:2 | ControlFlowNode for mc | global |
20+
| in_class.py:30:15:30:20 | ControlFlowNode for object | global |
21+
| in_class.py:31:17:31:19 | ControlFlowNode for foo | global |
22+
| in_class.py:33:6:33:12 | ControlFlowNode for MyClass | global |
2323
| in_class.py:34:1:34:5 | ControlFlowNode for print | global |
24-
| in_class.py:35:1:35:5 | ControlFlowNode for print | global |
25-
| in_class.py:35:7:35:8 | ControlFlowNode for mc | global |
24+
| in_class.py:35:1:35:2 | ControlFlowNode for mc | global |
25+
| in_class.py:37:1:37:5 | ControlFlowNode for print | global |
26+
| in_class.py:38:1:38:5 | ControlFlowNode for print | global |
27+
| in_class.py:38:7:38:8 | ControlFlowNode for mc | global |
28+
| in_class.py:40:1:40:5 | ControlFlowNode for print | global |
29+
| in_class.py:41:1:41:5 | ControlFlowNode for print | global |
30+
| in_class.py:41:7:41:13 | ControlFlowNode for MyClass | global |
2631
| test.py:6:12:6:17 | ControlFlowNode for param0 | local |
2732
| test.py:6:21:6:26 | ControlFlowNode for param1 | local |
2833
| test.py:12:5:12:16 | ControlFlowNode for global_local | global |

python/ql/test/library-tests/variables/scopes/scopes.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
| Local Variable .0 | test.py:48:12:48:29 | Function listcomp |
2929
| Local Variable .0 | test.py:52:5:52:25 | Function listcomp |
3030
| Local Variable Local | test.py:38:1:38:18 | Function func4 |
31+
| Local Variable Sub | in_class.py:5:1:5:22 | Class MyClass |
3132
| Local Variable arg | in_class.py:24:5:24:18 | Function func |
3233
| Local Variable baz | in_class.py:5:1:5:22 | Class MyClass |
3334
| Local Variable class_local | test.py:30:1:30:14 | Class C |
@@ -59,6 +60,7 @@
5960
| Local Variable self | test.py:40:9:40:29 | Function meth_inner |
6061
| Local Variable seq | test.py:44:1:44:15 | Function func5 |
6162
| Local Variable seq | test.py:51:1:51:21 | Function use_in_loop |
63+
| Local Variable stuff | in_class.py:30:5:30:22 | Class Sub |
6264
| Local Variable use | in_class.py:5:1:5:22 | Class MyClass |
6365
| Local Variable v | test.py:51:1:51:21 | Function use_in_loop |
6466
| Local Variable v | test.py:52:5:52:25 | Function listcomp |

0 commit comments

Comments
 (0)