2016-10-08 | Paul Boddie | raw annotate files changeset graph | Added some support for eliminating accessor class types where the provided attributes are invoked and are unbound methods. This uses a more sophisticated method involving usage observations that incorporate invocation information, permitting classes as accessors if paths through the code support them, even if other paths require instances as accessors to invoke methods. |
1 class C: 2 l = [2] 3 s = "test" 4 def __init__(self, x): 5 self.x = x 6 self.y = 3 7 self.z = "z" 8 9 c = C([1]) 10 x = c.x 11 f = c.x.__len__ 12 result1 = f() 13 14 y = c.l 15 g = c.l.__len__ 16 result2 = g() 17 18 yy = C.l 19 gg = C.l.__len__ 20 result22 = gg() 21 22 z = c.s 23 h = c.s.__len__ 24 result3 = h() 25 26 zz = C.s 27 hh = C.s.__len__ 28 result33 = hh() 29 30 a = c.y 31 b = c.z 32 i = c.z.__len__ 33 result4 = i()