Author: Armin Rigo <[email protected]>
Branch: py3.6
Changeset: r91899:75e725412a83
Date: 2017-07-16 14:51 +0200
http://bitbucket.org/pypy/pypy/changeset/75e725412a83/
Log: AsyncGenASend().descr_throw()
diff --git a/pypy/interpreter/generator.py b/pypy/interpreter/generator.py
--- a/pypy/interpreter/generator.py
+++ b/pypy/interpreter/generator.py
@@ -615,6 +615,7 @@
state = 0
def __init__(self, async_gen, w_value_to_send):
+ self.space = async_gen.space
self.async_gen = async_gen
self.w_value_to_send = w_value_to_send
@@ -622,20 +623,27 @@
return self
def descr__next__(self):
- space = self.async_gen.space
- return self.send_ex(space.w_None)
+ return self.send_ex(self.space.w_None)
def descr_send(self, w_arg):
return self.send_ex(w_arg)
def descr_throw(self, w_type, w_val=None, w_tb=None):
- XXX
+ space = self.space
+ if self.state == 2:
+ raise OperationError(space.w_StopIteration, space.w_None)
+ try:
+ w_value = self.async_gen.throw(w_type, w_val, w_tb)
+ return self.unwrap_value(w_value)
+ except OperationError as e:
+ self.state = 2
+ raise
def descr_close(self):
XXX
def send_ex(self, w_arg_or_err):
- space = self.async_gen.space
+ space = self.space
if self.state == 2:
raise OperationError(space.w_StopIteration, space.w_None)
@@ -655,10 +663,13 @@
try:
w_value = self.async_gen.send_ex(w_arg_or_err)
- if isinstance(w_value, AsyncGenValueWrapper):
- raise OperationError(space.w_StopIteration, w_value.w_value)
- else:
- return w_value
+ return self.unwrap_value(w_value)
except OperationError as e:
self.state = 2
raise
+
+ def unwrap_value(self, w_value):
+ if isinstance(w_value, AsyncGenValueWrapper):
+ raise OperationError(self.space.w_StopIteration, w_value.w_value)
+ else:
+ return w_value
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit