import t, c from stdint import * import stdio import coro # TPV-M3~M7 协程综合测试: # M3: For 内 await(range→While)、coro_sleep 挂起、coro_destroy 帧回池 # M4: raise 存码、await 子帧异常传播、coro_exception 查询 # M5/M6: try/except(链式匹配 + as e 绑定异常码 + 类型码) # M7: try/finally、异常消息 msg 槽、自定义异常类、帧池复用 class MyError(Exception): pass async def leaf(x: int) -> int: return x * 2 async def task(n: int) -> int: s: int = 0 for i in range(3): # M3:For 内 await s = s + await leaf(i) if s > 4: await coro.coro_sleep(5) # M3:coro_sleep 挂起(wake 槽 + 轮询) try: raise ValueError("boom") # M4/M6:raise 类型 + M7 消息 except ValueError as e: # M5/M6:as e 绑定异常码 s = s + e return s async def raiser() -> int: try: raise MyError("fin_msg") # M7:自定义异常类 + 消息 finally: x: int = 99 # M7:finally 正常路径执行 return 0 def main() -> int: tt: t.CPtr = task(3) r: int = coro.coro_run(tt) e: int = coro.coro_exception(tt) stdio.printf("coro result = %d exc = %d\n", r, e) coro.coro_destroy(tt) # M3/M7:destroy 回池 t1: t.CPtr = raiser() r1: int = coro.coro_run(t1) e1: int = coro.coro_exception(t1) m1: t.CPtr = coro.coro_exception_msg(t1) stdio.printf("coro result = %d exc = %d msg = %s\n", r1, e1, m1) coro.coro_destroy(t1) t2: t.CPtr = raiser() # 帧池复用 r2: int = coro.coro_run(t2) e2: int = coro.coro_exception(t2) stdio.printf("coro result = %d exc = %d\n", r2, e2) coro.coro_destroy(t2) return 0