Bug #1586448: the compiler module now emits the same bytecode for

list comprehensions as the builtin compiler, using the LIST_APPEND
opcode.
This commit is contained in:
Georg Brandl 2006-10-29 08:53:06 +00:00
parent 2c4fb8d601
commit 5addf70078
2 changed files with 9 additions and 7 deletions

View File

@ -573,12 +573,11 @@ class CodeGenerator:
def visitListComp(self, node):
self.set_lineno(node)
# setup list
append = "$append%d" % self.__list_count
tmpname = "$list%d" % self.__list_count
self.__list_count = self.__list_count + 1
self.emit('BUILD_LIST', 0)
self.emit('DUP_TOP')
self.emit('LOAD_ATTR', 'append')
self._implicitNameOp('STORE', append)
self._implicitNameOp('STORE', tmpname)
stack = []
for i, for_ in zip(range(len(node.quals)), node.quals):
@ -590,10 +589,9 @@ class CodeGenerator:
self.visit(if_, cont)
stack.insert(0, (start, cont, anchor))
self._implicitNameOp('LOAD', append)
self._implicitNameOp('LOAD', tmpname)
self.visit(node.expr)
self.emit('CALL_FUNCTION', 1)
self.emit('POP_TOP')
self.emit('LIST_APPEND',)
for start, cont, anchor in stack:
if cont:
@ -604,7 +602,7 @@ class CodeGenerator:
self.nextBlock(skip_one)
self.emit('JUMP_ABSOLUTE', start)
self.startBlock(anchor)
self._implicitNameOp('DELETE', append)
self._implicitNameOp('DELETE', tmpname)
self.__list_count = self.__list_count - 1

View File

@ -89,6 +89,10 @@ Core and builtins
Library
-------
- Bug #1586448: the compiler module now emits the same bytecode for
list comprehensions as the builtin compiler, using the LIST_APPEND
opcode.
- Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and
fix all codecs file wrappers to work correctly with the "with"
statement (bug #1586513).