Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r60929:45310cdfd89e
Date: 2013-02-07 11:55 +0100
http://bitbucket.org/pypy/pypy/changeset/45310cdfd89e/

Log:    Test and fix

diff --git a/lib_pypy/greenlet.py b/lib_pypy/greenlet.py
--- a/lib_pypy/greenlet.py
+++ b/lib_pypy/greenlet.py
@@ -57,7 +57,8 @@
     def __switch(target, methodname, *args):
         current = getcurrent()
         #
-        while not target:
+        while not (target.__main or _continulet.is_pending(target)):
+            # inlined __nonzero__ ^^^ in case it's overridden
             if not target.__started:
                 if methodname == 'switch':
                     greenlet_func = _greenlet_start
diff --git a/pypy/module/test_lib_pypy/test_greenlet.py 
b/pypy/module/test_lib_pypy/test_greenlet.py
--- a/pypy/module/test_lib_pypy/test_greenlet.py
+++ b/pypy/module/test_lib_pypy/test_greenlet.py
@@ -310,3 +310,12 @@
         assert g.gr_frame.f_code.co_name == 'f2'
         g.switch()
         assert g.gr_frame is None
+
+    def test_override_nonzero(self):
+        from greenlet import greenlet
+        class G(greenlet):
+            def __nonzero__(self):
+                raise ValueError
+        g = G(lambda: 42)
+        x = g.switch()
+        assert x == 42
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to