def typed_asyncoro(*args, **kwargs): runtime._pc_level += 1 coro = func(*args, **kwargs) if rettype: decl = returnType(rettype, wrap=False) else: try: decl = coro.send(None) except StopIteration as exc: runtime._pc_level -= 1 return exc.value except Exception: runtime._pc_level -= 1 raise if runtime.options.no_async: while True: try: coro.send(None) except StopIteration as exc: runtime._pc_level -= 1 if decl is not None: __reconcile(decl, exc.value) return decl except Exception: runtime._pc_level -= 1 raise if pc: coro = _wrap_in_coro(_ProgramCounterWrapper(runtime, coro)) task = Task(coro, loop=runtime._loop) task.f_back = sys._getframe(1) # enclosing MPyC coroutine call task.add_done_callback(lambda t: _reconcile(decl, t)) return _ncopy(decl)