[pypy-svn] pypy fast-forward: Add test for generator attributes: gi_running and gi_code.

amauryfa commits-noreply at bitbucket.org
Tue Jan 4 14:54:01 CET 2011


Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: fast-forward
Changeset: r40382:ff54b24a65ea
Date: 2011-01-04 14:22 +0100
http://bitbucket.org/pypy/pypy/changeset/ff54b24a65ea/

Log:	Add test for generator attributes: gi_running and gi_code. Fix a
	segfault in CPython test suite.

diff --git a/pypy/interpreter/generator.py b/pypy/interpreter/generator.py
--- a/pypy/interpreter/generator.py
+++ b/pypy/interpreter/generator.py
@@ -11,6 +11,7 @@
     def __init__(self, frame):
         self.space = frame.space
         self.frame = frame     # turned into None when frame_finished_execution
+        self.pycode = frame.pycode
         self.running = False
 
     def descr__repr__(self, space):
@@ -133,7 +134,7 @@
             return space.w_None
 
     def descr_gi_code(space, self):
-        return self.frame.pycode
+        return self.pycode
 
     def descr__name__(space, self):
         code_name = self.frame.pycode.co_name

diff --git a/pypy/interpreter/test/test_generator.py b/pypy/interpreter/test/test_generator.py
--- a/pypy/interpreter/test/test_generator.py
+++ b/pypy/interpreter/test/test_generator.py
@@ -5,14 +5,6 @@
             yield 1
         assert f().next() == 1
 
-    def test_attributes(self):
-        def f():
-            yield 1
-        g = f()
-        assert g.gi_code is f.func_code
-        assert g.__name__ == 'f'
-        assert g.gi_frame is not None
-
     def test_generator2(self):
         def f():
             yield 1
@@ -20,6 +12,22 @@
         assert g.next() == 1
         raises(StopIteration, g.next)
 
+    def test_attributes(self):
+        def f():
+            yield 1
+            assert g.gi_running
+        g = f()
+        assert g.gi_code is f.func_code
+        assert g.__name__ == 'f'
+        assert g.gi_frame is not None
+        assert not g.gi_running
+        g.next()
+        assert not g.gi_running
+        raises(StopIteration, g.next)
+        assert not g.gi_running
+        assert g.gi_frame is None
+        assert g.gi_code is f.func_code
+
     def test_generator3(self):
         def f():
             yield 1


More information about the Pypy-commit mailing list