Author: Armin Rigo <[email protected]>
Branch: stacklet
Changeset: r46588:fd3cc2185ccf
Date: 2011-08-17 22:08 +0200
http://bitbucket.org/pypy/pypy/changeset/fd3cc2185ccf/

Log:    Test and fix.

diff --git a/pypy/module/_continuation/interp_continuation.py 
b/pypy/module/_continuation/interp_continuation.py
--- a/pypy/module/_continuation/interp_continuation.py
+++ b/pypy/module/_continuation/interp_continuation.py
@@ -146,6 +146,9 @@
     try:
         ec = self.sthread.ec
         ec.topframeref = jit.vref_None
+        if start_state.w_value is not space.w_None:
+            raise OperationError(space.w_TypeError, space.wrap(
+                "can't send non-None value to a just-started continuation"))
         args = args.prepend(space.wrap(self))
         w_result = space.call_args(w_callable, args)
     except Exception, e:
diff --git a/pypy/module/_continuation/test/test_stacklet.py 
b/pypy/module/_continuation/test/test_stacklet.py
--- a/pypy/module/_continuation/test/test_stacklet.py
+++ b/pypy/module/_continuation/test/test_stacklet.py
@@ -102,6 +102,19 @@
         assert res == 'c'
         assert seen == [0, 1, 2, 3]
 
+    def test_initial_switch_must_give_None(self):
+        from _continuation import continuation
+        #
+        def empty_callback(c):
+            return 'ok'
+        #
+        c = continuation(empty_callback)
+        res = c.switch(None)
+        assert res == 'ok'
+        #
+        c = continuation(empty_callback)
+        raises(TypeError, c.switch, 'foo')
+
     def test_continuation_error(self):
         from _continuation import continuation, error
         #
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to