2008-09-05 | Paul Boddie | file changeset files shortlog | Added the final Return instruction to generated images. Fixed the For node processing to store assigned values before visiting assignment nodes. Changed source processing to not use temporary storage optimisations, since the conditions for such optimisations are not met in general when processing assignments. Adopted a list to hold sources (assignment expression values), since list and tuple assignment act on a hierarchy of such values. Added elementary support and tests for list assignment. |
paul@121 | 1 | #!/usr/bin/env python |
paul@121 | 2 | |
paul@121 | 3 | def e(x): pass |
paul@121 | 4 | |
paul@121 | 5 | class C: |
paul@121 | 6 | def h(self): |
paul@121 | 7 | self.m = self.f |
paul@121 | 8 | return self.m # not known |
paul@121 | 9 | def g(self): |
paul@121 | 10 | return self.f # C.f with context self |
paul@121 | 11 | def f(self): pass |
paul@121 | 12 | e = e |
paul@121 | 13 | |
paul@123 | 14 | def test(self): |
paul@123 | 15 | self.e() |
paul@123 | 16 | self.f() |
paul@123 | 17 | self.g() |
paul@123 | 18 | self.h() |
paul@123 | 19 | |
paul@121 | 20 | class D: |
paul@121 | 21 | e = C.e |
paul@121 | 22 | f = C.f |
paul@121 | 23 | def g(self): |
paul@121 | 24 | return self.f # D.f with context preserved |
paul@121 | 25 | def h(self): |
paul@121 | 26 | self.m = self.f |
paul@121 | 27 | return self.m # not known |
paul@121 | 28 | |
paul@123 | 29 | def test(self): |
paul@123 | 30 | self.e(1) |
paul@123 | 31 | self.f(2) |
paul@123 | 32 | self.g() |
paul@123 | 33 | self.h() |
paul@123 | 34 | |
paul@121 | 35 | class E(C): |
paul@121 | 36 | def g(self): |
paul@121 | 37 | return self.f # C.f with context self |
paul@121 | 38 | def h(self): |
paul@121 | 39 | self.m = self.f |
paul@121 | 40 | return self.m # not known |
paul@121 | 41 | |
paul@123 | 42 | def test(self): |
paul@123 | 43 | self.e() |
paul@123 | 44 | self.f() |
paul@123 | 45 | self.g() |
paul@123 | 46 | self.h() |
paul@123 | 47 | |
paul@121 | 48 | C.f |
paul@121 | 49 | D.f |
paul@121 | 50 | E.f |
paul@121 | 51 | |
paul@121 | 52 | c = C() |
paul@121 | 53 | d = D() |
paul@121 | 54 | e = E() |
paul@121 | 55 | |
paul@121 | 56 | x = c.f # bound C.f == c.h() == c.g() |
paul@121 | 57 | y = d.f # unbound C.f == d.h() == d.g() |
paul@121 | 58 | z = e.f # bound E.f == e.h() == e.g() |
paul@121 | 59 | |
paul@121 | 60 | p = c.e # bound C.e |
paul@121 | 61 | q = d.e # unbound C.e |
paul@121 | 62 | r = e.e # bound E.e |
paul@121 | 63 | |
paul@121 | 64 | # vim: tabstop=4 expandtab shiftwidth=4 |