Lichen

tests/contexts.py

840:2b30e05ae0d5
2018-07-05 Paul Boddie Introduced the detection of a particular error before its effects cause a less helpful error later in the deduction process (involving the absence of accessor types).
     1 class C:     2     l = [2, 4, 6, 8, 10]     3     s = "test"     4     def __init__(self, x):     5         self.x = x     6         self.y = 3     7         self.z = "zebra libre"     8     def __len__(self):     9         return len(self.z)    10     11 c = C([1])    12 x = c.x    13 f = c.x.__len__    14 print c             # <__main__.C instance>    15 print x             # [1]    16 print f             # __builtins__.list.list.__len__    17 print f()           # 1    18     19 y = c.l    20 g = c.l.__len__    21 print y             # [2, 4, 6, 8, 10]    22 print g             # __builtins__.list.list.__len__    23 print g()           # 5    24     25 yy = C.l    26 gg = C.l.__len__    27 print yy            # [2, 4, 6, 8, 10]    28 print gg            # __builtins__.list.list.__len__    29 print gg()          # 5    30     31 z = c.s    32 h = c.s.__len__    33 print z             # test    34 print h             # __builtins__.str.basestring.__len__    35 print h()           # 4    36     37 zz = C.s    38 hh = C.s.__len__    39 print zz            # test    40 print hh            # __builtins__.str.basestring.__len__    41 print hh()          # 4    42     43 a = c.y    44 b = c.z    45 i = c.z.__len__    46 print a             # 3    47 print b             # zebra libre    48 print i             # __builtins__.str.basestring.__len__    49 print i()           # 11    50     51 j = C.__len__    52 k = get_using(j, c)    53 try:    54     print j()    55 except UnboundMethodInvocation:    56     print "j(): invocation of method with class context"    57 print k()           # 11