[pypy-commit] pypy py3.5-corowrapper: aiter_wrapper
arigo
pypy.commits at gmail.com
Sat Sep 17 13:29:34 EDT 2016
Author: Armin Rigo <arigo at tunes.org>
Branch: py3.5-corowrapper
Changeset: r87186:d136ac649c2a
Date: 2016-09-17 19:29 +0200
http://bitbucket.org/pypy/pypy/changeset/d136ac649c2a/
Log: aiter_wrapper
diff --git a/pypy/interpreter/generator.py b/pypy/interpreter/generator.py
--- a/pypy/interpreter/generator.py
+++ b/pypy/interpreter/generator.py
@@ -427,6 +427,23 @@
descr_close.__doc__ = Coroutine.descr_close.__doc__
+class AIterWrapper(W_Root):
+ # NB. this type was added in CPython 3.5.2
+ _immutable_ = True
+
+ def __init__(self, w_aiter):
+ self.w_aiter = w_aiter
+
+ def descr__await__(self, space):
+ return space.wrap(self)
+
+ def descr__iter__(self, space):
+ return space.wrap(self)
+
+ def descr__next__(self, space):
+ raise OperationError(space.w_StopIteration, self.w_aiter)
+
+
@specialize.memo()
def get_generator_exit(space):
return OperationError(space.w_GeneratorExit,
diff --git a/pypy/interpreter/pyopcode.py b/pypy/interpreter/pyopcode.py
--- a/pypy/interpreter/pyopcode.py
+++ b/pypy/interpreter/pyopcode.py
@@ -1478,7 +1478,6 @@
def GET_AITER(self, oparg, next_instr):
from pypy.interpreter.generator import AIterWrapper, get_awaitable_iter
- xxxx
space = self.space
w_obj = self.popvalue()
@@ -1515,7 +1514,6 @@
def GET_ANEXT(self, oparg, next_instr):
from pypy.interpreter.generator import get_awaitable_iter
- zzzz
space = self.space
w_aiter = self.peekvalue()
diff --git a/pypy/interpreter/typedef.py b/pypy/interpreter/typedef.py
--- a/pypy/interpreter/typedef.py
+++ b/pypy/interpreter/typedef.py
@@ -468,7 +468,7 @@
ClassMethod, BuiltinFunction, descr_function_get)
from pypy.interpreter.pytraceback import PyTraceback
from pypy.interpreter.generator import GeneratorIterator, Coroutine
-from pypy.interpreter.generator import CoroutineWrapper
+from pypy.interpreter.generator import CoroutineWrapper, AIterWrapper
from pypy.interpreter.nestedscope import Cell
from pypy.interpreter.special import NotImplemented, Ellipsis
@@ -805,12 +805,6 @@
)
assert not GeneratorIterator.typedef.acceptable_as_base_class # no __new__
-#CoroutineWrapper.typedef = TypeDef("coroutine_wrapper",
-# __anext__ = interp2app(CoroutineWrapper.descr_next,
-# descrmismatch='__anext__'),
-#)
-#assert not CoroutineWrapper.typedef.acceptable_as_base_class # no __new__
-
Coroutine.typedef = TypeDef("coroutine",
__repr__ = interp2app(Coroutine.descr__repr__),
__reduce__ = interp2app(Coroutine.descr__reduce__),
@@ -844,6 +838,13 @@
)
assert not CoroutineWrapper.typedef.acceptable_as_base_class # no __new__
+AIterWrapper.typedef = TypeDef("aiter_wrapper",
+ __await__ = interp2app(AIterWrapper.descr__await__),
+ __iter__ = interp2app(AIterWrapper.descr__iter__),
+ __next__ = interp2app(AIterWrapper.descr__next__),
+)
+assert not AIterWrapper.typedef.acceptable_as_base_class # no __new__
+
Cell.typedef = TypeDef("cell",
__total_ordering__ = 'auto',
__lt__ = interp2app(Cell.descr__lt__),
More information about the pypy-commit
mailing list