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