2008-09-01 | Paul Boddie | raw annotate files changeset graph | Added notes about calling initialisers and instantiators, adopting a strategy where instantiation detected at compile-time is performed using an initialiser directly, whereas that detected at run-time is done using an instantiator whose code is now generated in the image. Added a finalise method to the Importer in order to set attribute locations before code generation, since some code (use of initialisers) requires details of a different program unit's locals (although this is actually unnecessary, but done because Attr instances are employed in the generated code). Changed class invocation at compile-time to acquire the new object reference from the frame of an already invoked initialiser just before dropping the frame. Added some support for raw image encoding of classes and functions. Changed JumpWithFrame usage to involve the current callable, not the current value. Added RecoverFrame and AdjustFrame instructions. Improved the tests around instantiation. |
1 #!/usr/bin/env python 2 3 x = 123 4 5 def f(a, b, c=4): 6 pass 7 8 f(1, 2, 3) 9 f(1, b=2, c=3) 10 f(c=3, b=2, a=1) 11 f(1, 2) 12 13 g = f 14 g(1, c=3, b=2) 15 g(1, 2) 16 17 def g(a, c, b=5): 18 pass 19 20 g(1, c=3, b=2) 21 g(1, 3) 22 23 def h(a, b, c=f(1, 2, 3)): 24 pass 25 26 h(1, 2, 3) 27 h(1, 2) 28 29 # vim: tabstop=4 expandtab shiftwidth=4