1.1 --- a/simplified.py Mon Jul 24 22:34:30 2006 +0200
1.2 +++ b/simplified.py Tue Jul 25 23:03:11 2006 +0200
1.3 @@ -92,7 +92,7 @@
1.4 elif hasattr(self, "value"):
1.5 return "%s %s (at %x)" % (self.__class__, repr(self.value), id(self))
1.6 elif hasattr(self, "ref"):
1.7 - return "%s '%s' (at %x)" % (self.__class__, self.ref.name, id(self))
1.8 + return "%s '%x' (at %x)" % (self.__class__, id(self.ref), id(self))
1.9 else:
1.10 return "%s (at %x)" % (self.__class__, id(self))
1.11
1.12 @@ -147,7 +147,6 @@
1.13
1.14 class Module(Node): "A Python module."
1.15 class Subprogram(Node): "A subprogram: functions, methods and loops."
1.16 -class Constant(Node): "A constant."
1.17 class Pass(Node): "A placeholder node corresponding to pass."
1.18 class Invoke(Node): "A function, method or loop invocation."
1.19 class Return(Node): "Return an evaluated expression."
1.20 @@ -170,6 +169,25 @@
1.21 class Try(Node): "A try...except...else...finally grouping node."
1.22 class Raise(Node): "An exception raising node."
1.23 class Not(Node): "A negation of an expression."
1.24 -class Class(Node): "A Python class."
1.25 +
1.26 +# Special non-program nodes.
1.27 +
1.28 +class Structure:
1.29 +
1.30 + "A non-program node containing some kind of namespace."
1.31 +
1.32 + def __init__(self, **kw):
1.33 + for name, value in kw.items():
1.34 + setattr(self, name, value)
1.35 +
1.36 + def __repr__(self):
1.37 + if hasattr(self, "name"):
1.38 + return "%s '%s' (at %x)" % (self.__class__, self.name, id(self))
1.39 + else:
1.40 + return "%s (at %x)" % (self.__class__, id(self))
1.41 +
1.42 +class Class(Structure): "A Python class."
1.43 +class Instance(Structure): "An instance."
1.44 +class Constant(Instance): "A constant."
1.45
1.46 # vim: tabstop=4 expandtab shiftwidth=4
2.1 --- a/simplify.py Mon Jul 24 22:34:30 2006 +0200
2.2 +++ b/simplify.py Tue Jul 25 23:03:11 2006 +0200
2.3 @@ -183,7 +183,7 @@
2.4
2.5 # Make a subprogram for the statement and record it outside the main tree.
2.6
2.7 - subprogram = Subprogram(name=hex(id(if_)), acquire_locals=1, returns_value=0, params=[], star=None, dstar=None)
2.8 + subprogram = Subprogram(name=None, acquire_locals=1, returns_value=0, params=[], star=None, dstar=None)
2.9 self.current_subprograms.append(subprogram)
2.10
2.11 # In the subprogram, make conditionals for each test plus statement,
2.12 @@ -197,7 +197,7 @@
2.13 expr=LoadAttr(expr=self.dispatch(compare), name="__true__"),
2.14 args=[], star=None, dstar=None))
2.15
2.16 - body_subprogram = Subprogram(name=hex(id(stmt)), acquire_locals=1, returns_value=0, params=[], star=None, dstar=None)
2.17 + body_subprogram = Subprogram(name=None, acquire_locals=1, returns_value=0, params=[], star=None, dstar=None)
2.18 self.current_subprograms.append(body_subprogram)
2.19
2.20 body_subprogram.code = self.dispatch(stmt) + [Return()]
2.21 @@ -211,7 +211,7 @@
2.22 # Add the compound statement from any else clause to the end.
2.23
2.24 if if_.else_ is not None:
2.25 - else_subprogram = Subprogram(name=hex(id(if_.else_)), acquire_locals=1, returns_value=0, params=[], star=None, dstar=None)
2.26 + else_subprogram = Subprogram(name=None, acquire_locals=1, returns_value=0, params=[], star=None, dstar=None)
2.27 self.current_subprograms.append(else_subprogram)
2.28
2.29 else_subprogram.code = self.dispatch(if_.else_) + [Return()]
2.30 @@ -236,7 +236,7 @@
2.31
2.32 # Make a subprogram for the statement and record it outside the main tree.
2.33
2.34 - subprogram = Subprogram(name=hex(id(tryexcept)), acquire_locals=1, returns_value=0, params=[], star=None, dstar=None)
2.35 + subprogram = Subprogram(name=None, acquire_locals=1, returns_value=0, params=[], star=None, dstar=None)
2.36 self.current_subprograms.append(subprogram)
2.37
2.38 # In the subprogram, make conditionals for each test plus statement,
2.39 @@ -293,7 +293,7 @@
2.40
2.41 # Make a subprogram for the expression and record it outside the main tree.
2.42
2.43 - subprogram = Subprogram(name=hex(id(compare)), acquire_locals=1, returns_value=1, params=[], star=None, dstar=None)
2.44 + subprogram = Subprogram(name=None, acquire_locals=1, returns_value=1, params=[], star=None, dstar=None)
2.45 self.current_subprograms.append(subprogram)
2.46
2.47 # In the subprogram, make instructions which invoke a method on the
2.48 @@ -337,7 +337,7 @@
2.49
2.50 # Make a subprogram for the expression and record it outside the main tree.
2.51
2.52 - subprogram = Subprogram(name=hex(id(and_)), acquire_locals=1, returns_value=1, params=[], star=None, dstar=None)
2.53 + subprogram = Subprogram(name=None, acquire_locals=1, returns_value=1, params=[], star=None, dstar=None)
2.54 self.current_subprograms.append(subprogram)
2.55
2.56 # In the subprogram, make instructions which store each operand, test
2.57 @@ -370,7 +370,7 @@
2.58
2.59 # Make a subprogram for the expression and record it outside the main tree.
2.60
2.61 - subprogram = Subprogram(name=hex(id(or_)), acquire_locals=1, returns_value=1, params=[], star=None, dstar=None)
2.62 + subprogram = Subprogram(name=None, acquire_locals=1, returns_value=1, params=[], star=None, dstar=None)
2.63 self.current_subprograms.append(subprogram)
2.64
2.65 # In the subprogram, make instructions which store each operand, test
2.66 @@ -592,14 +592,16 @@
2.67 # Invocation and subprogram transformations.
2.68
2.69 def visitClass(self, class_):
2.70 - structure = Class(name=hex(id(class_)), bases=class_.bases)
2.71 + structure = Class(name=class_.name, bases=self.dispatches(class_.bases))
2.72 self.structures.append(structure)
2.73
2.74 # Make a subprogram which initialises the class structure.
2.75
2.76 - subprogram = Subprogram(name=hex(id(class_)), structure=structure, params=[], star=None, dstar=None)
2.77 + subprogram = Subprogram(name=None, structure=structure, params=[], star=None, dstar=None)
2.78 self.current_subprograms.append(subprogram)
2.79
2.80 + # The class is initialised using the code found inside.
2.81 +
2.82 subprogram.code = self.dispatch(class_.code)
2.83
2.84 self.current_subprograms.pop()
2.85 @@ -655,7 +657,7 @@
2.86 # Make a subprogram for the function and record it outside the main
2.87 # tree.
2.88
2.89 - subprogram = Subprogram(name=hex(id(function)), returns_value=1, star=None, dstar=None)
2.90 + subprogram = Subprogram(name=function.name, returns_value=1, star=None, dstar=None)
2.91 self.current_subprograms.append(subprogram)
2.92 subprogram.code = self.dispatch(function.code)
2.93 self.current_subprograms.pop()
2.94 @@ -671,7 +673,7 @@
2.95 # Make a subprogram for the function and record it outside the main
2.96 # tree.
2.97
2.98 - subprogram = Subprogram(name=hex(id(lambda_)), returns_value=1, star=None, dstar=None)
2.99 + subprogram = Subprogram(name=None, returns_value=1, star=None, dstar=None)
2.100 self.current_subprograms.append(subprogram)
2.101 subprogram.code = [Return(expr=self.dispatch(lambda_.code))]
2.102 self.current_subprograms.pop()
2.103 @@ -695,7 +697,7 @@
2.104
2.105 # Make a subprogram for the block and record it outside the main tree.
2.106
2.107 - subprogram = Subprogram(name=hex(id(while_)), acquire_locals=1, returns_value=0, params=[], star=None, dstar=None)
2.108 + subprogram = Subprogram(name=None, acquire_locals=1, returns_value=0, params=[], star=None, dstar=None)
2.109 self.current_subprograms.append(subprogram)
2.110
2.111 # Include a conditional statement in the subprogram.
2.112 @@ -727,7 +729,7 @@
2.113
2.114 # Make a subprogram for the block and record it outside the main tree.
2.115
2.116 - subprogram = Subprogram(name=hex(id(for_)), acquire_locals=1, returns_value=0, params=[], star=None, dstar=None)
2.117 + subprogram = Subprogram(name=None, acquire_locals=1, returns_value=0, params=[], star=None, dstar=None)
2.118 self.current_subprograms.append(subprogram)
2.119
2.120 if for_.else_ is not None: