Lichen

tests/attr_providers.py

338:61776a5a0e16
2016-12-07 Paul Boddie Associate constant name information with references so that structure members such as function instance default members can be generated statically, thus eliminating unnecessary structure initialisation in the translated code. Improved the determination of dynamic functions in the importer to consider only non-constant defaults.
     1 class C:     2     def __init__(self):     3         self.a = 1     4         self.c = 3     5      6     b = 2     7      8 class D:     9     def __init__(self):    10         self.a = 3    11         self.b = 4    12     13 class E:    14     a = 5    15     b = 6    16     17 def f(x):    18     return x.a, x.b    19     20 def g(x):    21     22     # Should only permit D instance and E.    23     24     x.a = 7    25     x.b = 8    26     return f(x)    27     28 def h(x):    29     x.c    30     x.a = 4    31     x.b    32     return f(x)    33     34 c = C()    35 d = D()    36 e = E()    37     38 print f(c)          # (1, 2)    39 print f(d)          # (3, 4)    40 print f(e)          # (5, 6)    41 print f(E)          # (5, 6)    42     43 try:    44     print g(c)      # should fail with an error caused by a test    45 except TypeError:    46     print "g(c): c is not a suitable argument."    47     48 print g(d)          # (7, 8)    49     50 try:    51     print g(e)      # should fail with an error caused by a test    52 except TypeError:    53     print "g(e): e is not a suitable argument."    54     55 print g(E)          # (7, 8)    56     57 print h(c)          # (4, 2)