Commit Graph

7 Commits

Author SHA1 Message Date
Andreas Kling
ecadf3ce21 LibJS: Inline AsyncIteratorClose with proper Await in for-await-of
The AsyncIteratorClose bytecode op calls async_iterator_close() which
uses synchronous await() internally. This spins the event loop while
execution contexts are on the stack, violating the microtask checkpoint
assertion in LibWeb.

Replace AsyncIteratorClose op emissions in for-await-of close handlers
with inline bytecode that uses the proper Await op, allowing the async
function to yield and resume naturally through the event loop.

For the non-throw path (break/return/continue-to-outer): emit
GetMethod, Call, Await, and ThrowIfNotObject inline.

For the throw path: wrap the close steps in an exception handler so
that any error from GetMethod/Call/Await is discarded and the original
exception is rethrown, per spec step 5.
2026-02-12 11:37:43 +01:00
Timothy Flynn
b1a189acfa LibWeb: Use WebIDL::invoke_promise_callback in Streams where appropriate
This avoids an issue where rejected JS::Promise types were converted to
a resolved WebIDL::Promise type.
2025-04-15 20:33:30 -04:00
Timothy Flynn
b324b876f2 LibWeb: Import ReadableStreamTee tests 2025-04-15 20:33:30 -04:00
Timothy Flynn
df1e51b80b LibWeb: Use the correct realm when initializing streams
There is an open issue to clarify exactly what realm is to be used when
creating promises. There are surely many more places we will need to
update to use the correct realm (which will be the realm of `this`'s
relevant global object).
2025-04-15 20:33:11 -04:00
Timothy Flynn
1abf5ce843 LibWeb: Import ReadableStream global tests 2025-04-15 20:33:11 -04:00
Timothy Flynn
d5d9d999ae LibWeb: Implement ReadableStream's async iterator 2025-04-14 17:43:11 -04:00
Timothy Flynn
e6463e4ecc LibWeb: Import ReadableStream async iterator tests 2025-04-14 17:43:11 -04:00