2008-06-16 | Paul Boddie | file changeset files shortlog | Added internal stack operations to instructions in order to support stack avoidance optimisations (where operands are loaded from other places than the stack). Replaced Pop with ResetStack. Added code and code_location attributes to the Importer class; made the test program's machine function use an Importer instance which provides such attributes for the initialisation of the RSVPMachine. |
paul@87 | 1 | #!/usr/bin/env python |
paul@87 | 2 | |
paul@87 | 3 | def f(x): |
paul@87 | 4 | pass |
paul@87 | 5 | |
paul@87 | 6 | class B: |
paul@87 | 7 | def f(self): |
paul@87 | 8 | pass |
paul@87 | 9 | |
paul@87 | 10 | Bf = f # context == parent |
paul@87 | 11 | |
paul@87 | 12 | b = B() |
paul@87 | 13 | |
paul@87 | 14 | # on A on a |
paul@87 | 15 | class A: |
paul@87 | 16 | f1 = f # unbound (A) bound (a) |
paul@87 | 17 | f2 = B.f # unbound (B) unbound (B) |
paul@87 | 18 | f3 = b.f # bound (b) bound (b) |
paul@87 | 19 | Bf = B.Bf # unbound (B) unbound (B) |
paul@87 | 20 | |
paul@87 | 21 | def __init__(self): |
paul@87 | 22 | self.f4 = f # N/A function |
paul@87 | 23 | self.f5 = B.f # N/A unbound (B) |
paul@87 | 24 | self.f6 = b.f # N/A bound (b) |
paul@87 | 25 | |
paul@87 | 26 | def m(self): |
paul@87 | 27 | self.f1 |
paul@87 | 28 | self.f2 |
paul@87 | 29 | self.f3 |
paul@87 | 30 | self.f4 |
paul@87 | 31 | self.f5 |
paul@87 | 32 | self.f6 |
paul@87 | 33 | |
paul@87 | 34 | a = A() |
paul@87 | 35 | |
paul@87 | 36 | A.f1 |
paul@87 | 37 | A.f2 |
paul@87 | 38 | A.f3 |
paul@87 | 39 | a.f1 |
paul@87 | 40 | a.f2 |
paul@87 | 41 | a.f3 |
paul@87 | 42 | a.f4 |
paul@87 | 43 | a.f5 |
paul@87 | 44 | a.f6 |
paul@87 | 45 | |
paul@87 | 46 | # vim: tabstop=4 expandtab shiftwidth=4 |