micropython/tests/ports/webassembly
Damien George 8a3546b3bd webassembly: Add JavaScript-based asyncio support.
This commit adds a significant portion of the existing MicroPython asyncio
module to the webassembly port, using parts of the existing asyncio code
and some custom JavaScript parts.

The key difference to the standard asyncio is that this version uses the
JavaScript runtime to do the actual scheduling and waiting on events, eg
Promise fulfillment, timeouts, fetching URLs.

This implementation does not include asyncio.run(). Instead one just uses
asyncio.create_task(..) to start tasks and then returns to the JavaScript.
Then JavaScript will run the tasks.

The implementation here tries to reuse as much existing asyncio code as
possible, and gets all the semantics correct for things like cancellation
and asyncio.wait_for.  An alternative approach would reimplement Task,
Event, etc using JavaScript Promise's.  That approach is very difficult to
get right when trying to implement cancellation (because it's not possible
to cancel a JavaScript Promise).

Signed-off-by: Damien George <damien@micropython.org>
2024-04-24 16:24:00 +10:00
..
asyncio_create_task.mjs webassembly: Add JavaScript-based asyncio support. 2024-04-24 16:24:00 +10:00
asyncio_create_task.mjs.exp webassembly: Add JavaScript-based asyncio support. 2024-04-24 16:24:00 +10:00
asyncio_sleep.mjs webassembly: Add JavaScript-based asyncio support. 2024-04-24 16:24:00 +10:00
asyncio_sleep.mjs.exp webassembly: Add JavaScript-based asyncio support. 2024-04-24 16:24:00 +10:00
await_js_async_py.mjs webassembly/proxy_c: Ensure return value of async fun is passed to JS. 2024-03-30 13:13:51 +11:00
await_js_async_py.mjs.exp webassembly/proxy_c: Ensure return value of async fun is passed to JS. 2024-03-30 13:13:51 +11:00
basic.js tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
basic.js.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
filesystem.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
filesystem.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
float.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
float.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
fun_call.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
fun_call.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
fun_proxy.mjs webassembly/proxy_js: Allow a Python proxy of a function to be undone. 2024-03-30 13:13:51 +11:00
fun_proxy.mjs.exp webassembly/proxy_js: Allow a Python proxy of a function to be undone. 2024-03-30 13:13:51 +11:00
fun_py_callback_js.mjs webassembly/proxy_js: Promote Python thenable to a Promise. 2024-03-30 13:13:51 +11:00
fun_py_callback_js.mjs.exp webassembly/proxy_js: Promote Python thenable to a Promise. 2024-03-30 13:13:51 +11:00
globals.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
globals.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
heap_expand.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
heap_expand.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
jsffi_create_proxy.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
jsffi_create_proxy.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
jsffi_to_js.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
jsffi_to_js.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
override_new.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
override_new.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
promise_with_resolvers.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
promise_with_resolvers.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
py_proxy_delete.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
py_proxy_delete.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
py_proxy_dict.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
py_proxy_dict.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
py_proxy_has.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
py_proxy_has.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
py_proxy_own_keys.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
py_proxy_own_keys.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
py_proxy_set.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
py_proxy_set.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
py_proxy_to_js.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
py_proxy_to_js.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
register_js_module.js tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
register_js_module.js.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
run_python_async.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
run_python_async.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
run_python_async2.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
run_python_async2.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
this_behaviour.mjs tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
this_behaviour.mjs.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
various.js tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00
various.js.exp tests/ports/webassembly: Add webassembly JS tests. 2024-03-22 14:31:25 +11:00