Author: Maciej Fijalkowski <[email protected]>
Branch: speedup-list-comprehension
Changeset: r52791:8b1f69191c51
Date: 2012-02-22 21:12 -0700
http://bitbucket.org/pypy/pypy/changeset/8b1f69191c51/

Log:    make sure we create only one list

diff --git a/pypy/interpreter/astcompiler/codegen.py 
b/pypy/interpreter/astcompiler/codegen.py
--- a/pypy/interpreter/astcompiler/codegen.py
+++ b/pypy/interpreter/astcompiler/codegen.py
@@ -965,7 +965,7 @@
         self.emit_op_arg(ops.CALL_METHOD, (kwarg_count << 8) | arg_count)
         return True
 
-    def _listcomp_generator(self, gens, gen_index, elt):
+    def _listcomp_generator(self, gens, gen_index, elt, outermost=False):
         start = self.new_block()
         skip = self.new_block()
         if_cleanup = self.new_block()
@@ -973,7 +973,8 @@
         gen = gens[gen_index]
         assert isinstance(gen, ast.comprehension)
         gen.iter.walkabout(self)
-        self.emit_op(ops.BUILD_LIST_FROM_ARG)
+        if outermost:
+            self.emit_op(ops.BUILD_LIST_FROM_ARG)
         self.emit_op(ops.GET_ITER)
         self.use_next_block(start)
         self.emit_jump(ops.FOR_ITER, anchor)
@@ -999,7 +1000,7 @@
 
     def visit_ListComp(self, lc):
         self.update_position(lc.lineno)
-        self._listcomp_generator(lc.generators, 0, lc.elt)
+        self._listcomp_generator(lc.generators, 0, lc.elt, outermost=True)
 
     def _comp_generator(self, node, generators, gen_index):
         start = self.new_block()
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to