# HG changeset patch # User paulb@jeremy # Date 1152970014 -7200 # Node ID a3f9003353c7aeba8c2ca0625538bcd88c73e66e # Parent e51ec15e7979dd0cf2d5aad029df0a623482da47 Fixed original node mentions. diff -r e51ec15e7979 -r a3f9003353c7 simplify.py --- a/simplify.py Sat Jul 15 01:21:58 2006 +0200 +++ b/simplify.py Sat Jul 15 15:26:54 2006 +0200 @@ -182,7 +182,7 @@ return self._visitBuiltin(list, "List") def visitDict(self, dict): - result = Invoke(expr=LoadName(name="Dict")) + result = Invoke(dict, expr=LoadName(name="Dict")) args = [] for key, value in dict.items: tuple = Invoke(expr=LoadName(name="Tuple"), star=None, dstar=None) @@ -197,7 +197,7 @@ # Make a subprogram for the expression and record it outside the main tree. - subprogram = Subprogram(and_, name=hex(id(and_)), acquire_locals=1, returns_value=1, params=[], star=None, dstar=None) + subprogram = Subprogram(name=hex(id(and_)), acquire_locals=1, returns_value=1, params=[], star=None, dstar=None) self.current_subprograms.append(subprogram) nodes = [] @@ -226,7 +226,7 @@ # Make a subprogram for the expression and record it outside the main tree. - subprogram = Subprogram(or_, name=hex(id(or_)), acquire_locals=1, returns_value=1, params=[], star=None, dstar=None) + subprogram = Subprogram(name=hex(id(or_)), acquire_locals=1, returns_value=1, params=[], star=None, dstar=None) self.current_subprograms.append(subprogram) nodes = [] @@ -259,13 +259,13 @@ # Operators. def visitUnaryAdd(self, unaryadd): - return Invoke(expr=LoadAttr(expr=self.dispatch(unaryadd.expr), name="__pos__"), args=[]) + return Invoke(unaryadd, expr=LoadAttr(expr=self.dispatch(unaryadd.expr), name="__pos__"), args=[]) def visitUnarySub(self, unarysub): - return Invoke(expr=LoadAttr(expr=self.dispatch(unarysub.expr), name="__neg__"), args=[]) + return Invoke(unarysub, expr=LoadAttr(expr=self.dispatch(unarysub.expr), name="__neg__"), args=[]) def visitInvert(self, invert): - return Invoke(expr=LoadAttr(expr=self.dispatch(invert.expr), name="__invert__"), args=[]) + return Invoke(invert, expr=LoadAttr(expr=self.dispatch(invert.expr), name="__invert__"), args=[]) # Assignments. @@ -315,11 +315,11 @@ store_expr = StoreTemp(index="expr", expr=self.dispatch(slice.expr)) store_lower = StoreTemp(index="lower", expr=self.dispatch_or_none(slice.lower)) store_upper = StoreTemp(index="upper", expr=self.dispatch_or_none(slice.upper)) - node_slice = self._visitSlice(LoadTemp(index="expr"), LoadTemp(index="lower"), LoadTemp(index="upper"), "OP_APPLY") + node_slice = self._visitSlice(slice, LoadTemp(index="expr"), LoadTemp(index="lower"), LoadTemp(index="upper"), "OP_APPLY") get_incremented = StoreTemp( expr=Invoke(expr=LoadAttr(expr=node_slice, name=self.augassign_methods[augassign.op]), args=[expr]) ) - store = self._visitSlice(LoadTemp(index="expr"), LoadTemp(index="lower"), LoadTemp(index="upper"), "OP_ASSIGN", LoadTemp()) + store = self._visitSlice(slice, LoadTemp(index="expr"), LoadTemp(index="lower"), LoadTemp(index="upper"), "OP_ASSIGN", LoadTemp()) result.code = [store_expr, store_lower, store_upper, get_incremented, store, ReleaseTemp(index="expr"), ReleaseTemp(index="lower"), ReleaseTemp(index="upper"), ReleaseTemp()] @@ -333,11 +333,11 @@ store_expr = StoreTemp(index="expr", expr=self.dispatch(subscript.expr)) subs = self._visitSubscriptSubs(subscript.subs) store_subs = StoreTemp(index="subs", expr=subs) - node_subscript = self._visitSubscript(LoadTemp(index="expr"), LoadTemp(index="subs"), "OP_APPLY") + node_subscript = self._visitSubscript(subscript, LoadTemp(index="expr"), LoadTemp(index="subs"), "OP_APPLY") get_incremented = StoreTemp( expr=Invoke(expr=LoadAttr(expr=node_subscript, name=self.augassign_methods[augassign.op]), args=[expr]) ) - store = self._visitSubscript(LoadTemp(index="expr"), LoadTemp(index="subs"), "OP_ASSIGN", LoadTemp()) + store = self._visitSubscript(subscript, LoadTemp(index="expr"), LoadTemp(index="subs"), "OP_ASSIGN", LoadTemp()) result.code = [store_expr, store_subs, get_incremented, store, ReleaseTemp(index="expr"), ReleaseTemp(index="subs"), ReleaseTemp()] else: @@ -354,9 +354,9 @@ def visitAssList(self, asslist, in_sequence=0): if not in_sequence: - expr = LoadTemp(asslist) + expr = LoadTemp() else: - expr = Invoke(asslist, expr=LoadAttr(expr=LoadTemp(), name="next")) + expr = Invoke(expr=LoadAttr(expr=LoadTemp(), name="next")) result = Assign(asslist) store = StoreTemp(expr=Invoke(expr=LoadAttr(name="__iter__", expr=expr))) release = ReleaseTemp() @@ -367,9 +367,9 @@ def _visitAssNameOrAttr(self, node, in_sequence): if not in_sequence: - return LoadTemp(node) + return LoadTemp() else: - return Invoke(node, expr=LoadAttr(expr=LoadTemp(), name="next")) + return Invoke(expr=LoadAttr(expr=LoadTemp(), name="next")) def visitAssName(self, assname, in_sequence=0): expr = self._visitAssNameOrAttr(assname, in_sequence) @@ -382,7 +382,7 @@ result = StoreAttr(assattr, name=assattr.attrname, lvalue=lvalue, expr=expr) return result - def _visitSlice(self, expr, lower, upper, flags, value=None): + def _visitSlice(self, slice, expr, lower, upper, flags, value=None): if flags == "OP_ASSIGN": args = [value] result = Invoke(expr=LoadAttr(expr=expr, name="__setslice__")) @@ -400,14 +400,16 @@ args.insert(0, lower) args.insert(1, upper) + result.original = slice result.args = args return result def visitSlice(self, slice, in_sequence=0): value = self._visitAssNameOrAttr(slice, in_sequence) - return self._visitSlice(self.dispatch(slice.expr), self.dispatch_or_none(slice.lower), self.dispatch_or_none(slice.upper), slice.flags, value) + return self._visitSlice(slice, self.dispatch(slice.expr), self.dispatch_or_none(slice.lower), + self.dispatch_or_none(slice.upper), slice.flags, value) - def _visitSubscript(self, expr, subs, flags, value=None): + def _visitSubscript(self, subscript, expr, subs, flags, value=None): if flags == "OP_ASSIGN": args = [value] result = Invoke(expr=LoadAttr(expr=expr, name="__setitem__")) @@ -424,6 +426,7 @@ args.insert(0, subs) + result.original = subscript result.args = args return result @@ -436,7 +439,7 @@ def visitSubscript(self, subscript, in_sequence=0): value = self._visitAssNameOrAttr(subscript, in_sequence) subs = self._visitSubscriptSubs(subscript.subs) - return self._visitSubscript(self.dispatch(subscript.expr), subs, subscript.flags, value) + return self._visitSubscript(subscript, self.dispatch(subscript.expr), subs, subscript.flags, value) # Invocation and subprogram transformations. @@ -475,7 +478,7 @@ # Make a subprogram for the function and record it outside the main # tree. - subprogram = Subprogram(function, name=function.name, returns_value=1, star=None, dstar=None) + subprogram = Subprogram(name=function.name, returns_value=1, star=None, dstar=None) self.current_subprograms.append(subprogram) subprogram.code = self.dispatch(function.code) self.current_subprograms.pop() @@ -494,7 +497,7 @@ # Make a subprogram for the function and record it outside the main # tree. - subprogram = Subprogram(lambda_, name=hex(id(lambda_)), returns_value=1, star=None, dstar=None) + subprogram = Subprogram(name=hex(id(lambda_)), returns_value=1, star=None, dstar=None) self.current_subprograms.append(subprogram) subprogram.code = [Return(expr=self.dispatch(lambda_.code))] self.current_subprograms.pop() @@ -502,7 +505,7 @@ # Get the subprogram reference to the lambda. - return LoadRef(ref=subprogram) + return LoadRef(lambda_, ref=subprogram) def visitCallFunc(self, callfunc): result = Invoke(callfunc, same_frame=0, star=None, dstar=None) @@ -518,7 +521,7 @@ # Make a subprogram for the block and record it outside the main tree. - subprogram = Subprogram(while_, name=hex(id(while_)), acquire_locals=1, returns_value=0, params=[], star=None, dstar=None) + subprogram = Subprogram(name=hex(id(while_)), acquire_locals=1, returns_value=0, params=[], star=None, dstar=None) self.current_subprograms.append(subprogram) # Include a conditional statement in the subprogram. @@ -550,7 +553,7 @@ # Make a subprogram for the block and record it outside the main tree. - subprogram = Subprogram(for_, name=hex(id(for_)), acquire_locals=1, returns_value=0, params=[], star=None, dstar=None) + subprogram = Subprogram(name=hex(id(for_)), acquire_locals=1, returns_value=0, params=[], star=None, dstar=None) self.current_subprograms.append(subprogram) # Wrap the assignment in a try...except statement.