Commit 5addf700 authored by Georg Brandl's avatar Georg Brandl

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

list comprehensions as the builtin compiler, using the LIST_APPEND
opcode.
parent 2c4fb8d6
......@@ -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
......
......@@ -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).
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment