mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-11-09 15:52:33 +08:00
A stackless coroutine body cannot use the await-call entries, which park the caller's stack, so `await f(...)` of an async f that never suspends spawned f's promise and awaited it: 4M such awaits took 142 ms against main's 91 ms. The coroutine body now calls f's inline await entry (sc_ai_*), which runs the body in place between scr_async_inline_enter and exit and leaves a throw pending. The coroutine then takes the await's turn itself. A throw becomes the rejected promise the await re-throws from on the same turn, and an adopting `return f(...)` first takes the then-job turn, exactly as the await-call entries do (80 ms). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>