2017-01-20 | Paul Boddie | raw annotate files changeset graph | Confined output program temporary variable management to the translator. Updated the optimiser to employ neutral notation for temporary-related operations for more obvious detection of temporary variable usage. Changed the encoding of attribute access instructions to also return the substitution variables that were found in each access instruction sequence. Changed the output mechanism used during translation to capture function body output so that temporary variable declarations may be computed and emitted before body output. Added a modules dictionary to the translator for potential inspection of the translated modules for each program. |
1 class A: 2 def __init__(self, x): 3 self.x = x 4 def __sub__(self, other): 5 return self.x - other.x 6 7 class B: 8 def __init__(self, x): 9 self.x = x 10 def __rsub__(self, other): 11 return other.x - self.x 12 13 class C: 14 def __init__(self, x): 15 self.x = x 16 17 a = A(10) 18 b = B(5) 19 c = C(3) 20 21 print a - b # 5 22 print c - b # -2 23 print a - c # 7 24 25 try: 26 print b - c # should raise an exception 27 except TypeError: 28 print "b - c: b and c do not respectively support the __sub__ and __rsub__ operations"