[pypy-commit] pypy generator-in-rpython: in-progress

arigo noreply at buildbot.pypy.org
Mon Dec 19 18:22:50 CET 2011


Author: Armin Rigo <arigo at tunes.org>
Branch: generator-in-rpython
Changeset: r50711:c5bd904d1a8f
Date: 2011-12-19 15:58 +0100
http://bitbucket.org/pypy/pypy/changeset/c5bd904d1a8f/

Log:	in-progress

diff --git a/pypy/objspace/flow/flowcontext.py b/pypy/objspace/flow/flowcontext.py
--- a/pypy/objspace/flow/flowcontext.py
+++ b/pypy/objspace/flow/flowcontext.py
@@ -249,7 +249,7 @@
 
     def build_flow(self):
         if self.is_generator:
-            self.produce_generator_entry()
+            self.produce_generator_mark()
         while self.pendingblocks:
             block = self.pendingblocks.popleft()
             frame = self.create_frame()
@@ -316,11 +316,10 @@
             del self.recorder
         self.fixeggblocks()
 
-    def produce_generator_entry(self):
+    def produce_generator_mark(self):
         [initialblock] = self.pendingblocks
         initialblock.operations.append(
-            SpaceOperation('generator_entry', list(initialblock.inputargs),
-                           Variable()))
+            SpaceOperation('generator_mark', [], Variable()))
 
     def generate_yield(self, frame, w_result):
         assert self.is_generator
diff --git a/pypy/objspace/flow/test/test_generator.py b/pypy/objspace/flow/test/test_generator.py
--- a/pypy/objspace/flow/test/test_generator.py
+++ b/pypy/objspace/flow/test/test_generator.py
@@ -12,7 +12,7 @@
                 i += 1
         graph = self.codetest(f)
         ops = self.all_operations(graph)
-        assert ops == {'generator_entry': 1,
+        assert ops == {'generator_mark': 1,
                        'lt': 1, 'is_true': 1,
                        'yield': 2,
                        'inplace_add': 1}
diff --git a/pypy/translator/test/test_generator.py b/pypy/translator/test/test_generator.py
--- a/pypy/translator/test/test_generator.py
+++ b/pypy/translator/test/test_generator.py
@@ -1,6 +1,9 @@
+from pypy.conftest import option
 from pypy.objspace.flow.objspace import FlowObjSpace
+from pypy.objspace.flow.model import Variable
 from pypy.translator.translator import TranslationContext
 from pypy.translator.generator import replace_graph_with_bootstrap
+from pypy.translator.generator import get_variable_names
 
 
 # ____________________________________________________________
@@ -50,6 +53,10 @@
 def test_explicit():
     assert list(f_gen(10)) == list(f_explicit(10))
 
+def test_get_variable_names():
+    lst = get_variable_names([Variable('a'), Variable('b_'), Variable('a')])
+    assert lst == ['g_a', 'g_b', 'g_a_']
+
 # ____________________________________________________________
 
 
@@ -62,20 +69,22 @@
         #
         space = FlowObjSpace()
         graph = space.build_flow(func)
-        assert graph.startblock.operations[0].opname == 'generator_entry'
+        assert graph.startblock.operations[0].opname == 'generator_mark'
         replace_graph_with_bootstrap(graph, 'newgraph')
+        if option.view:
+            graph.show()
         block = graph.startblock
         ops = block.operations
         assert ops[0].opname == 'call'      # e = Entry1()
-        assert ops[1].opname == 'setattr'   # e.n_0 = n
-        assert ops[1].args[1].value.startswith('n_')
-        assert ops[2].opname == 'setattr'   # e.x_0 = x
-        assert ops[2].args[1].value.startswith('x_')
-        assert ops[3].opname == 'setattr'   # e.y_0 = y
-        assert ops[3].args[1].value.startswith('y_')
-        assert ops[4].opname == 'setattr'   # e.z_0 = z
-        assert ops[4].args[1].value.startswith('z_')
-        assert ops[5].opname == 'call'      # g = Generator(e)
+        assert ops[1].opname == 'setattr'   # e.g_n = n
+        assert ops[1].args[1].value == 'g_n'
+        assert ops[2].opname == 'setattr'   # e.g_x = x
+        assert ops[2].args[1].value == 'g_x'
+        assert ops[3].opname == 'setattr'   # e.g_y = y
+        assert ops[3].args[1].value == 'g_y'
+        assert ops[4].opname == 'setattr'   # e.g_z = z
+        assert ops[4].args[1].value == 'g_z'
+        assert ops[5].opname == 'call'      # g = GeneratorIterator(e)
         assert ops[5].args[1] == ops[0].result
         assert len(ops) == 6
         assert len(block.exits) == 1


More information about the pypy-commit mailing list