Author: Armin Rigo <ar...@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__),
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to