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