Lichen

tests/chain.py

210:263f32338b37
2016-11-22 Paul Boddie Prevent lambdas with defaults being referenced as static function objects.
     1 class C:     2     class D:     3         class E:     4             def m(self, x):     5                 self.x = x     6                 l = self.x.__len__     7                 s = self.o     8                 return self.o.__len__     9             n = 123    10             o = "123"    11     12         p = "456"    13         q = 789    14     15         class F(E):    16             def r(self, y):    17                 s = self.o    18                 C.D.F.t = 234    19                 return self.o.__len__    20             t = 123    21             def u(self):    22                 return self.o    23             def v(self):    24                 return self.u().__len__    25     26 def static():    27     c = C    28     d = C.D    29     e = C.D.E    30     f = C.D.E.m    31     g = C.D.E.n    32     h = C.D.p    33     34 def static_via_constant():    35     i = C.D.p.__len__    36     37 def assign():    38     C.D.q = 987    39     40 def indirect():    41     e = C.D.E    42     inst = e()    43     method = inst.m    44     return method("5")    45     46 def broken():    47     inst2 = C.D.F()    48     l = inst2.u().__len__    49     50 static()    51 static_via_constant()    52 assign()    53 result1 = indirect()    54 broken()    55     56 # Static chains.    57     58 c = C    59 d = C.D    60 e = C.D.E    61 f = C.D.E.m    62 g = C.D.E.n    63 h = C.D.p    64     65 # Static via constant.    66     67 i = C.D.p.__len__    68     69 # Static assignment.    70     71 C.D.q = 987    72     73 # Indirect accesses.    74     75 inst = e()    76 method = inst.m    77 result2 = method("5")    78     79 # Broken chains.    80     81 inst2 = C.D.F()    82 l = inst2.u().__len__