Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

gh-124621: Emscripten: Add support for async input devices#136822

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
ambv merged 5 commits intopython:mainfromhoodmane:emscripten-async-input-device
Jul 19, 2025

Conversation

hoodmane
Copy link
Contributor

@hoodmanehoodmane commentedJul 19, 2025
edited
Loading

This is useful for implementing properinput(). 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 offd_read(), otherwise we use the originalfd_read(). We also add a variant ofFS.createDevice() calledFS.createAsyncInputDevice().

Finally, if JSPI is available, we wrap themain() symbol withWebAssembly.promising() so that we can stack switch fromfd_read(). If JSPI is not available, attempting to read from an AsyncInputDevice will raise anOSError.

@hoodmane
Copy link
ContributorAuthor

!buildbot emscripten

@bedevere-bot
Copy link

🤖 New build scheduled with the buildbot fleet by@hoodmane for commit3d573d5 🤖

Results will be shown at:

https://buildbot.python.org/all/#/grid?branch=refs%2Fpull%2F136822%2Fmerge

The command will test the builders whose names match following regular expression:emscripten

The builders matched are:

  • WASM Emscripten PR

This is useful for implementing proper `input()`. It requires theJavaScript engine to support the wasm JSPI spec which is now stage 4.It is supported on Chrome since version 137 and on Firefox and nodebehind a flag.We override the `__wasi_fd_read()` syscall with our own variant thatchecks for a readAsync operation. If it has it, we use our own asyncvariant 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 AsyncInputDevicewill raise an `OSError`.
@hoodmanehoodmaneforce-pushed theemscripten-async-input-device branch from3d573d5 to7d0e709CompareJuly 19, 2025 14:26
@hoodmanehoodmane changed the titlegh-136810: Emscripten: Add support for async input devicesgh-124621: Emscripten: Add support for async input devicesJul 19, 2025
@ambvambv merged commit7ae4749 intopython:mainJul 19, 2025
40 checks passed
@hoodmane
Copy link
ContributorAuthor

Oops this caused some test failures. Fix incoming.

hoodmane added a commit to hoodmane/cpython that referenced this pull requestJul 19, 2025
…handlingIntroduced inpythonGH-136822. If the fd is already closed,`SYSCALLS.getStreamFromFD()` throws an error. We need to catch it anddiscard it. The `__wasi_fd_read_orig()` fallback will use it to set errno.
hoodmane added a commit to hoodmane/cpython that referenced this pull requestJul 19, 2025
…handlingIntroduced inpythonGH-136822. If the fd is already closed,`SYSCALLS.getStreamFromFD()` throws an error. We need to catch it anddiscard it. The `__wasi_fd_read_orig()` fallback will use it to set errno.
hoodmane added a commit to hoodmane/cpython that referenced this pull requestJul 19, 2025
…handlingIntroduced inpythonGH-136822. If the fd is already closed,`SYSCALLS.getStreamFromFD()` throws an error. We need to catch it anddiscard it. The `__wasi_fd_read_orig()` fallback will use it to set errno.
hoodmane added a commit to hoodmane/cpython that referenced this pull requestJul 19, 2025
…handlingIntroduced inpythonGH-136822. If the fd is already closed,`SYSCALLS.getStreamFromFD()` throws an error. We need to catch it anddiscard it. The `__wasi_fd_read_orig()` fallback will use it to set errno.
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@freakboy3742freakboy3742Awaiting requested review from freakboy3742freakboy3742 is a code owner

@ambvambvAwaiting requested review from ambv

Assignees
No one assigned
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

3 participants
@hoodmane@bedevere-bot@ambv

[8]ページ先頭

©2009-2025 Movatter.jp