cpython/Tools/wasm/emscripten
Hood Chatham 7ae4749d06
gh-124621: Emscripten: Add support for async input devices (GH-136822)
This is useful for implementing proper `input()`. It requires the
JavaScript engine to support the wasm JSPI spec which is now stage 4.
It is supported on Chrome since version 137 and on Firefox and node
behind a flag.

We override the `__wasi_fd_read()` syscall with our own variant that
checks for a readAsync operation. If it has it, we use our own async
variant of `fd_read()`, otherwise we use the original `fd_read()`.
We also add a variant of `FS.createDevice()` called
`FS.createAsyncInputDevice()`.

Finally, if JSPI is available, we wrap the `main()` symbol with
`WebAssembly.promising()` so that we can stack switch from `fd_read()`.
If JSPI is not available, attempting to read from an AsyncInputDevice
will raise an `OSError`.
2025-07-19 17:14:29 +02:00
..
web_example gh-127146: Fix Emscripten build with --pydebug (#131672) 2025-03-25 05:43:31 +08:00
.editorconfig GH-133600: Refactor wasi.py into wasi/__main__.py 2025-05-07 12:10:53 -07:00
__main__.py gh-124621: Emscripten: Add support for async input devices (GH-136822) 2025-07-19 17:14:29 +02:00
make_libffi.sh gh-127629: Add ctypes to the Emscripten build (#127683) 2024-12-10 10:32:58 +08:00
node_entry.mjs gh-127503: Improve tracebacks on Emscripten when there is a trap (#131158) 2025-03-13 08:28:15 +08:00