[pypy-commit] pypy py3.6-asyncgen: Begin refactoring handling of .w_yielded_from
rlamy
pypy.commits at gmail.com
Thu Oct 3 13:15:40 EDT 2019
Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: py3.6-asyncgen
Changeset: r97716:d157cd5db6ca
Date: 2019-10-03 16:35 +0100
http://bitbucket.org/pypy/pypy/changeset/d157cd5db6ca/
Log: Begin refactoring handling of .w_yielded_from
diff --git a/pypy/interpreter/generator.py b/pypy/interpreter/generator.py
--- a/pypy/interpreter/generator.py
+++ b/pypy/interpreter/generator.py
@@ -11,7 +11,7 @@
class GeneratorOrCoroutine(W_Root):
_immutable_fields_ = ['pycode']
- w_yielded_from = None
+ _w_yielded_from = None
def __init__(self, frame, name=None, qualname=None):
self.space = frame.space
@@ -153,9 +153,9 @@
# Called from execute_frame() just before resuming the bytecode
# interpretation.
space = self.space
- w_yf = self.w_yielded_from
+ w_yf = self.get_delegate()
if w_yf is not None:
- self.w_yielded_from = None
+ self.set_delegate(None)
try:
self.next_yield_from(frame, w_yf, w_arg_or_err)
except OperationError as operr:
@@ -179,6 +179,12 @@
else:
return r_uint(0)
+ def get_delegate(self):
+ return self._w_yielded_from
+
+ def set_delegate(self, w_delegate):
+ self._w_yielded_from = w_delegate
+
def next_yield_from(self, frame, w_yf, w_inputvalue_or_err):
"""Fetch the next item of the current 'yield from', push it on
the frame stack, and raises Yield. If there isn't one, push
@@ -209,7 +215,7 @@
return
else:
frame.pushvalue(w_retval)
- self.w_yielded_from = w_yf
+ self.set_delegate(w_yf)
raise Yield
def _leak_stopiteration(self, e):
@@ -259,8 +265,8 @@
operr = OperationError(w_type, w_val, tb)
operr.normalize_exception(space)
- # note: w_yielded_from is always None if 'self.running'
- if (self.w_yielded_from is not None and
+ # note: _w_yielded_from is always None if 'self.running'
+ if (self.get_delegate() is not None and
operr.match(space, space.w_GeneratorExit)):
try:
self._gen_close_iter(space)
@@ -276,8 +282,8 @@
def _gen_close_iter(self, space):
assert not self.running
- w_yf = self.w_yielded_from
- self.w_yielded_from = None
+ w_yf = self.get_delegate()
+ self.set_delegate(None)
self.running = True
try:
gen_close_iter(space, w_yf)
@@ -290,8 +296,8 @@
return # nothing to do in this case
space = self.space
operr = None
- # note: w_yielded_from is always None if 'self.running'
- w_yf = self.w_yielded_from
+ # note: _w_yielded_from is always None if 'self.running'
+ w_yf = self.get_delegate()
if w_yf is not None:
try:
self._gen_close_iter(space)
diff --git a/pypy/interpreter/pyopcode.py b/pypy/interpreter/pyopcode.py
--- a/pypy/interpreter/pyopcode.py
+++ b/pypy/interpreter/pyopcode.py
@@ -1556,7 +1556,7 @@
w_iterable = self.popvalue()
w_iter = get_awaitable_iter(self.space, w_iterable)
if isinstance(w_iter, Coroutine):
- if w_iter.w_yielded_from is not None:
+ if w_iter.get_delegate() is not None:
# 'w_iter' is a coroutine object that is being awaited,
# '.w_yielded_from' is the current awaitable being awaited on.
raise oefmt(self.space.w_RuntimeError,
diff --git a/pypy/interpreter/typedef.py b/pypy/interpreter/typedef.py
--- a/pypy/interpreter/typedef.py
+++ b/pypy/interpreter/typedef.py
@@ -838,7 +838,7 @@
gi_running = interp_attrproperty('running', cls=GeneratorIterator, wrapfn="newbool"),
gi_frame = GetSetProperty(GeneratorIterator.descr_gicr_frame),
gi_code = interp_attrproperty_w('pycode', cls=GeneratorIterator),
- gi_yieldfrom=interp_attrproperty_w('w_yielded_from', cls=GeneratorIterator),
+ gi_yieldfrom=GetSetProperty(GeneratorIterator.get_delegate),
__name__ = GetSetProperty(GeneratorIterator.descr__name__,
GeneratorIterator.descr_set__name__),
__qualname__ = GetSetProperty(GeneratorIterator.descr__qualname__,
@@ -862,7 +862,7 @@
cr_running = interp_attrproperty('running', cls=Coroutine, wrapfn="newbool"),
cr_frame = GetSetProperty(Coroutine.descr_gicr_frame),
cr_code = interp_attrproperty_w('pycode', cls=Coroutine),
- cr_await = interp_attrproperty_w('w_yielded_from', cls=Coroutine),
+ cr_await=GetSetProperty(Coroutine.get_delegate),
__name__ = GetSetProperty(Coroutine.descr__name__,
Coroutine.descr_set__name__,
doc="name of the coroutine"),
@@ -890,7 +890,7 @@
ag_running = interp_attrproperty('running', cls=AsyncGenerator, wrapfn="newbool"),
ag_frame = GetSetProperty(AsyncGenerator.descr_gicr_frame),
ag_code = interp_attrproperty_w('pycode', cls=AsyncGenerator),
- ag_await = interp_attrproperty_w('w_yielded_from', cls=AsyncGenerator),
+ ag_await=GetSetProperty(AsyncGenerator.get_delegate),
__name__ = GetSetProperty(AsyncGenerator.descr__name__,
AsyncGenerator.descr_set__name__,
doc="name of the async generator"),
More information about the pypy-commit
mailing list