2016-12-06 | Paul Boddie | file changeset files shortlog | Fixed the native read function, allocating new strings from the input buffer. Added a value to IOError instances and fixed IOError raising in the native functions and helper functions. Added a test of reading data and updated the test runner to send some default input into every test. |
paul@59 | 1 | class C: |
paul@59 | 2 | class D: |
paul@59 | 3 | class E: |
paul@59 | 4 | def m(self, x): |
paul@65 | 5 | self.x = x |
paul@66 | 6 | l = self.x.__len__ |
paul@66 | 7 | s = self.o |
paul@66 | 8 | return self.o.__len__ |
paul@62 | 9 | n = 123 |
paul@66 | 10 | o = "123" |
paul@74 | 11 | |
paul@62 | 12 | p = "456" |
paul@71 | 13 | q = 789 |
paul@59 | 14 | |
paul@74 | 15 | class F(E): |
paul@74 | 16 | def r(self, y): |
paul@74 | 17 | s = self.o |
paul@74 | 18 | C.D.F.t = 234 |
paul@74 | 19 | return self.o.__len__ |
paul@74 | 20 | t = 123 |
paul@75 | 21 | def u(self): |
paul@75 | 22 | return self.o |
paul@75 | 23 | def v(self): |
paul@75 | 24 | return self.u().__len__ |
paul@74 | 25 | |
paul@114 | 26 | def static(): |
paul@59 | 27 | c = C |
paul@59 | 28 | d = C.D |
paul@59 | 29 | e = C.D.E |
paul@59 | 30 | f = C.D.E.m |
paul@62 | 31 | g = C.D.E.n |
paul@62 | 32 | h = C.D.p |
paul@114 | 33 | |
paul@266 | 34 | print c # __main__.C |
paul@266 | 35 | print d # __main__.C.D |
paul@266 | 36 | print e # __main__.C.D.E |
paul@266 | 37 | print f # __main__.C.D.E.m |
paul@266 | 38 | print g # 123 |
paul@266 | 39 | print h # "456" |
paul@266 | 40 | |
paul@114 | 41 | def static_via_constant(): |
paul@62 | 42 | i = C.D.p.__len__ |
paul@114 | 43 | |
paul@266 | 44 | print i # __builtins__.str.basestring.__len__ |
paul@266 | 45 | |
paul@114 | 46 | def assign(): |
paul@71 | 47 | C.D.q = 987 |
paul@114 | 48 | |
paul@114 | 49 | def indirect(): |
paul@114 | 50 | e = C.D.E |
paul@59 | 51 | inst = e() |
paul@59 | 52 | method = inst.m |
paul@65 | 53 | return method("5") |
paul@59 | 54 | |
paul@114 | 55 | def broken(): |
paul@114 | 56 | inst2 = C.D.F() |
paul@114 | 57 | l = inst2.u().__len__ |
paul@266 | 58 | return l |
paul@114 | 59 | |
paul@114 | 60 | static() |
paul@114 | 61 | static_via_constant() |
paul@114 | 62 | assign() |
paul@266 | 63 | print indirect() # __builtins__.str.basestring.__len__ |
paul@266 | 64 | print indirect()() # 3 |
paul@266 | 65 | print broken() # __builtins__.str.basestring.__len__ |
paul@266 | 66 | print broken()() # 3 |
paul@266 | 67 | |
paul@266 | 68 | print C.D.q # 987 |
paul@114 | 69 | |
paul@114 | 70 | # Static chains. |
paul@114 | 71 | |
paul@59 | 72 | c = C |
paul@59 | 73 | d = C.D |
paul@59 | 74 | e = C.D.E |
paul@59 | 75 | f = C.D.E.m |
paul@62 | 76 | g = C.D.E.n |
paul@62 | 77 | h = C.D.p |
paul@114 | 78 | |
paul@266 | 79 | print c # __main__.C |
paul@266 | 80 | print d # __main__.C.D |
paul@266 | 81 | print e # __main__.C.D.E |
paul@266 | 82 | print f # __main__.C.D.E.m |
paul@266 | 83 | print g # 123 |
paul@266 | 84 | print h # "456" |
paul@266 | 85 | |
paul@114 | 86 | # Static via constant. |
paul@114 | 87 | |
paul@62 | 88 | i = C.D.p.__len__ |
paul@114 | 89 | |
paul@266 | 90 | print i # __builtins__.str.basestring.__len__ |
paul@266 | 91 | print i() # 3 |
paul@266 | 92 | |
paul@114 | 93 | # Static assignment. |
paul@114 | 94 | |
paul@266 | 95 | C.D.q = 654 |
paul@266 | 96 | |
paul@266 | 97 | print C.D.q # 654 |
paul@114 | 98 | |
paul@114 | 99 | # Indirect accesses. |
paul@114 | 100 | |
paul@59 | 101 | inst = e() |
paul@59 | 102 | method = inst.m |
paul@266 | 103 | print method("5") # __builtins__.str.basestring.__len__ |
paul@266 | 104 | print method("5")() # 3 |
paul@114 | 105 | |
paul@114 | 106 | # Broken chains. |
paul@114 | 107 | |
paul@114 | 108 | inst2 = C.D.F() |
paul@114 | 109 | l = inst2.u().__len__ |
paul@266 | 110 | print l # __builtins__.str.basestring.__len__ |
paul@266 | 111 | print l() # 3 |