@@ -161,7 +161,7 @@ def test_nested_obj_method():
161
161
SINK (a .obj .foo ) # $ MISSING: flow
162
162
163
163
# ------------------------------------------------------------------------------
164
- # In global scope
164
+ # Global scope
165
165
# ------------------------------------------------------------------------------
166
166
167
167
def func_defined_before ():
@@ -178,3 +178,111 @@ def func_defined_after():
178
178
def test_global_funcs ():
179
179
func_defined_before ()
180
180
func_defined_after ()
181
+
182
+ # ------------------------------------------------------------------------------
183
+ # All the other tests, but also in global scope.
184
+ #
185
+ # You might think that these are just the same... but it turns out they are not :O
186
+ # ------------------------------------------------------------------------------
187
+
188
+
189
+ myobj = MyObj ("OK" )
190
+
191
+ setFoo (myobj , SOURCE )
192
+ SINK (myobj .foo ) # $ flow="SOURCE, l:-1 -> myobj.foo"
193
+
194
+
195
+
196
+ myobj = MyObj ("OK" )
197
+
198
+ myobj .setFoo (SOURCE )
199
+ SINK (myobj .foo ) # $ MISSING: flow
200
+
201
+
202
+
203
+ myobj = MyObj (NONSOURCE )
204
+ myobj .foo = SOURCE
205
+ SINK (myobj .foo ) # $ flow="SOURCE, l:-1 -> myobj.foo"
206
+
207
+
208
+
209
+ myobj = MyObj (NONSOURCE )
210
+ myobj .foo = SOURCE
211
+ myobj .foo = NONSOURCE
212
+ SINK_F (myobj .foo )
213
+
214
+
215
+
216
+ myobj = MyObj (NONSOURCE )
217
+ myobj .foo = SOURCE
218
+ if cond :
219
+ myobj .foo = NONSOURCE
220
+ SINK_F (myobj .foo )
221
+ SINK (myobj .foo ) # $ flow="SOURCE, l:-4 -> myobj.foo"
222
+
223
+
224
+
225
+ myobj = MyObj (NONSOURCE )
226
+ myobj .foo = SOURCE
227
+ if cond :
228
+ myobj .foo = NONSOURCE
229
+ SINK_F (myobj .foo )
230
+ else :
231
+ myobj .foo = NONSOURCE
232
+ SINK_F (myobj .foo )
233
+ SINK_F (myobj .foo )
234
+
235
+
236
+
237
+ myobj = MyObj (NONSOURCE )
238
+ myobj .foo = SOURCE
239
+ SINK (getattr (myobj , "foo" )) # $ flow="SOURCE, l:-1 -> getattr(..)"
240
+
241
+
242
+
243
+ myobj = MyObj (NONSOURCE )
244
+ setattr (myobj , "foo" , SOURCE )
245
+ SINK (myobj .foo ) # $ flow="SOURCE, l:-1 -> myobj.foo"
246
+
247
+
248
+
249
+ myobj = MyObj (NONSOURCE )
250
+ setattr (myobj , "foo" , SOURCE )
251
+ SINK (getattr (myobj , "foo" )) # $ flow="SOURCE, l:-1 -> getattr(..)"
252
+
253
+
254
+
255
+ myobj = MyObj (NONSOURCE )
256
+ setattr (myobj , "foo" , SOURCE )
257
+ setattr (myobj , "foo" , NONSOURCE )
258
+ SINK_F (getattr (myobj , "foo" ))
259
+
260
+
261
+
262
+ obj = MyObj (SOURCE )
263
+ SINK (obj .foo ) # $ flow="SOURCE, l:-1 -> obj.foo"
264
+
265
+
266
+
267
+ obj = MyObj (foo = SOURCE )
268
+ SINK (obj .foo ) # $ flow="SOURCE, l:-1 -> obj.foo"
269
+
270
+
271
+ SINK (fields_with_local_flow (SOURCE )) # $ flow="SOURCE -> fields_with_local_flow(..)"
272
+
273
+ # ------------------------------------------------------------------------------
274
+ # Nested Object
275
+ # ------------------------------------------------------------------------------
276
+
277
+
278
+ x = SOURCE
279
+ a = NestedObj ()
280
+ a .obj .foo = x
281
+ SINK (a .obj .foo ) # $ flow="SOURCE, l:-3 -> a.obj.foo"
282
+
283
+
284
+
285
+ x = SOURCE
286
+ a = NestedObj ()
287
+ a .getObj ().foo = x
288
+ SINK (a .obj .foo ) # $ MISSING: flow
0 commit comments