cpython/Python
Hood Chatham 6b179adb8c
gh-106213: Make Emscripten trampolines work with JSPI (GH-106219)
There is a WIP proposal to enable webassembly stack switching which have been
implemented in v8:

https://github.com/WebAssembly/js-promise-integration

It is not possible to switch stacks that contain JS frames so the Emscripten JS
trampolines that allow calling functions with the wrong number of arguments
don't work in this case. However, the js-promise-integration proposal requires
the [type reflection for Wasm/JS API](https://github.com/WebAssembly/js-types)
proposal, which allows us to actually count the number of arguments a function
expects.

For better compatibility with stack switching, this PR checks if type reflection
is available, and if so we use a switch block to decide the appropriate
signature. If type reflection is unavailable, we should use the current EMJS
trampoline.

We cache the function argument counts since when I didn't cache them performance
was negatively affected.

Co-authored-by: T. Wouters <thomas@python.org>
Co-authored-by: Brett Cannon <brett@python.org>
2023-09-15 15:04:21 -07:00
..
clinic gh-108753: Enhance pystats (#108754) 2023-09-06 15:54:59 +00:00
deepfreeze gh-97669: Create Tools/build/ directory (#97963) 2022-10-17 12:01:00 +02:00
frozen_modules gh-97669: Create Tools/build/ directory (#97963) 2022-10-17 12:01:00 +02:00
Python-ast.c GH-91079: Rename C_RECURSION_LIMIT to Py_C_RECURSION_LIMIT (#108507) 2023-09-08 09:48:28 +00:00
Python-tokenize.c gh-107015: Remove async_hacks from the tokenizer (#107018) 2023-07-26 16:34:15 +01:00
README
_warnings.c gh-106320: Remove private _PyTraceback functions (#108453) 2023-08-24 23:35:47 +00:00
abstract_interp_cases.c.h GH-105848: Replace KW_NAMES + CALL with LOAD_CONST + CALL_KW (GH-109300) 2023-09-13 10:25:45 -07:00
adaptive.md GH-98686: Get rid of "adaptive" and "quick" instructions (GH-99182) 2022-11-09 10:50:09 -08:00
asdl.c
asm_trampoline.S gh-96143: Move the perf trampoline files to the Python directory (#98675) 2022-10-25 23:34:22 +01:00
assemble.c gh-108444: Replace _PyLong_AsInt() with PyLong_AsInt() (#108459) 2023-08-25 01:01:30 +02:00
ast.c gh-109341: Fix crash on compiling invalid AST including TypeAlias (#109349) 2023-09-13 09:00:39 -07:00
ast_opt.c GH-91079: Rename C_RECURSION_LIMIT to Py_C_RECURSION_LIMIT (#108507) 2023-09-08 09:48:28 +00:00
ast_unparse.c gh-100227: Move _str_replace_inf to PyInterpreterState (gh-102333) 2023-02-28 14:16:39 -07:00
bltinmodule.c gh-108765: Python.h no longer includes <ctype.h> (#108831) 2023-09-03 18:54:27 +02:00
bootstrap_hash.c gh-106320: Remove private pylifecycle.h functions (#106400) 2023-07-04 09:41:43 +00:00
bytecodes.c GH-104584: Don't call executors from JUMP_BACKWARD (GH-109347) 2023-09-13 10:26:50 -07:00
ceval.c GH-105848: Replace KW_NAMES + CALL with LOAD_CONST + CALL_KW (GH-109300) 2023-09-13 10:25:45 -07:00
ceval_gil.c gh-108987: Fix _thread.start_new_thread() race condition (#109135) 2023-09-11 17:27:03 +02:00
ceval_macros.h GH-105848: Replace KW_NAMES + CALL with LOAD_CONST + CALL_KW (GH-109300) 2023-09-13 10:25:45 -07:00
codecs.c gh-108765: Python.h no longer includes <ctype.h> (#108831) 2023-09-03 18:54:27 +02:00
compile.c gh-105658: fix excess trace events for except block ending with a conditional block (#109384) 2023-09-14 17:06:08 +01:00
condvar.h gh-74953: _PyThread_cond_after() uses _PyTime_t (#94056) 2022-06-21 15:45:49 +02:00
context.c GH-84436: Skip refcounting for known immortals (GH-107605) 2023-08-04 16:24:50 -07:00
dtoa.c gh-104263: Rely on Py_NAN and introduce Py_INFINITY (GH-104202) 2023-05-10 17:44:52 +01:00
dup2.c gh-108765: Python.h no longer includes <unistd.h> (#108783) 2023-09-02 16:50:18 +02:00
dynamic_annotations.c
dynload_hpux.c bpo-44959: Add fallback to extension modules with '.sl' suffix on HP-UX (GH-27857) 2021-09-08 14:43:00 +02:00
dynload_shlib.c gh-101758: Clean Up Uses of Import State (gh-101919) 2023-02-15 15:32:31 -07:00
dynload_stub.c
dynload_win.c gh-108765: Python.h no longer includes <ctype.h> (#108831) 2023-09-03 18:54:27 +02:00
emscripten_signal.c GH-108614: Unbreak emscripten build (GH-109132) 2023-09-08 17:54:45 +01:00
emscripten_trampoline.c gh-106213: Make Emscripten trampolines work with JSPI (GH-106219) 2023-09-15 15:04:21 -07:00
errors.c gh-108765: Python.h no longer includes <ctype.h> (#108831) 2023-09-03 18:54:27 +02:00
executor.c GH-108614: Remove `TIER_ONE` and `TIER_TWO` from `_PUSH_FRAME` (GH-108725) 2023-09-04 11:36:57 +01:00
executor_cases.c.h GH-105848: Replace KW_NAMES + CALL with LOAD_CONST + CALL_KW (GH-109300) 2023-09-13 10:25:45 -07:00
fileutils.c gh-107913: Fix possible losses of OSError error codes (GH-107930) 2023-08-27 00:35:06 +03:00
flowgraph.c dump readable opcode names in flowgraph debug utility (#109392) 2023-09-14 14:28:21 +00:00
formatter_unicode.c gh-92536: Remove PyUnicode_READY() calls (#105210) 2023-06-02 01:33:17 +02:00
frame.c gh-107149: Make PyUnstable_ExecutableKinds public (#108440) 2023-08-31 09:56:06 +02:00
frozen.c GH-108716: Turn off deep-freezing of code objects. (GH-108722) 2023-09-08 10:34:40 +01:00
frozenmain.c gh-106320: Remove private _PyInterpreterState functions (#106325) 2023-07-02 01:39:38 +00:00
future.c gh-106320: Remove more private _PyUnicode C API functions (#106382) 2023-07-03 22:35:46 +00:00
generated_cases.c.h GH-104584: Don't call executors from JUMP_BACKWARD (GH-109347) 2023-09-13 10:26:50 -07:00
getargs.c gh-108765: Python.h no longer includes <ctype.h> (#108831) 2023-09-03 18:54:27 +02:00
getcompiler.c
getcopyright.c Update copyright years to 2023. (gh-100848) 2023-01-08 09:13:25 -06:00
getopt.c gh-90300: split --help output into separate options (#30331) 2022-06-01 05:50:01 -04:00
getplatform.c
getversion.c gh-81057: Move Globals in Core Code to _PyRuntimeState (gh-99496) 2022-11-15 09:45:11 -07:00
hamt.c gh-106320: Remove private PyLong C API functions (#108429) 2023-08-24 18:53:50 +02:00
hashtable.c gh-108634: Py_TRACE_REFS uses a hash table (#108663) 2023-08-31 18:33:34 +02:00
import.c GH-108716: Turn off deep-freezing of code objects. (GH-108722) 2023-09-08 10:34:40 +01:00
importdl.c gh-106320: Remove private _PyErr C API functions (#106356) 2023-07-03 10:48:50 +00:00
importdl.h gh-106210 Remove Emscripten import trampoline (#106211) 2023-06-29 17:20:49 -07:00
initconfig.c gh-108753: Enhance pystats (#108754) 2023-09-06 15:54:59 +00:00
instrumentation.c GH-105848: Replace KW_NAMES + CALL with LOAD_CONST + CALL_KW (GH-109300) 2023-09-13 10:25:45 -07:00
intrinsics.c gh-108765: Cleanup #include in Python/*.c files (#108977) 2023-09-06 15:56:08 +02:00
legacy_tracing.c gh-108765: Cleanup #include in Python/*.c files (#108977) 2023-09-06 15:56:08 +02:00
marshal.c gh-106320: Move private _PySet API to the internal API (#107041) 2023-07-22 17:04:34 +02:00
modsupport.c bpo-42327: C API: Add PyModule_Add() function (GH-23443) 2023-07-18 09:42:05 +03:00
mysnprintf.c Add a warning message about PyOS_snprintf (#95993) 2022-10-07 11:49:53 -07:00
mystrtoul.c gh-108765: Python.h no longer includes <ctype.h> (#108831) 2023-09-03 18:54:27 +02:00
opcode_targets.h GH-105848: Replace KW_NAMES + CALL with LOAD_CONST + CALL_KW (GH-109300) 2023-09-13 10:25:45 -07:00
optimizer.c GH-104584: Don't call executors from JUMP_BACKWARD (GH-109347) 2023-09-13 10:26:50 -07:00
optimizer_analysis.c gh-105481: remove regen-opcode. Generated _PyOpcode_Caches in regen-cases. (#108367) 2023-08-23 18:39:00 +01:00
pathconfig.c gh-108765: Cleanup #include in Python/*.c files (#108977) 2023-09-06 15:56:08 +02:00
perf_trampoline.c gh-108765: Cleanup #include in Python/*.c files (#108977) 2023-09-06 15:56:08 +02:00
preconfig.c gh-106320: Remove private pylifecycle.h functions (#106400) 2023-07-04 09:41:43 +00:00
pyarena.c
pyctype.c
pyfpe.c bpo-46315: Add ifdef HAVE_ feature checks for WASI compatibility (GH-30507) 2022-01-13 09:46:04 +01:00
pyhash.c gh-106320: Move private _PyHash API to the internal C API (#107026) 2023-07-22 13:49:37 +00:00
pylifecycle.c GH-108716: Turn off deep-freezing of code objects. (GH-108722) 2023-09-08 10:34:40 +01:00
pymath.c bpo-45440: Remove pymath.c fallbacks (GH-28977) 2021-10-15 19:45:34 +02:00
pystate.c gh-106213: Make Emscripten trampolines work with JSPI (GH-106219) 2023-09-15 15:04:21 -07:00
pystrcmp.c gh-108767: Replace ctype.h functions with pyctype.h functions (#108772) 2023-09-01 18:36:53 +02:00
pystrhex.c gh-108765: pystrhex: Replace stdlib.h abs() with Py_ABS() (#108830) 2023-09-02 23:15:54 +02:00
pystrtod.c gh-108765: Cleanup #include in Python/*.c files (#108977) 2023-09-06 15:56:08 +02:00
pythonrun.c gh-109179: Fix traceback display for SyntaxErrors with notes (#109197) 2023-09-11 19:18:34 +01:00
pytime.c gh-108765: Python.h no longer includes <sys/time.h> (#108775) 2023-09-02 17:51:19 +02:00
specialize.c GH-105848: Replace KW_NAMES + CALL with LOAD_CONST + CALL_KW (GH-109300) 2023-09-13 10:25:45 -07:00
stdlib_module_names.h gh-105481: generate _specializations and _specialized_instructions from bytecodes.c (#105913) 2023-06-19 23:47:04 +01:00
structmember.c gh-106869: Use new PyMemberDef constant names (#106871) 2023-07-25 15:28:30 +02:00
suggestions.c gh-108765: Cleanup #include in Python/*.c files (#108977) 2023-09-06 15:56:08 +02:00
symtable.c gh-109219: propagate free vars through type param scopes (#109377) 2023-09-14 10:20:32 -06:00
sysmodule.c gh-108753: Enhance pystats (#108754) 2023-09-06 15:54:59 +00:00
thread.c gh-108765: Cleanup #include in Python/*.c files (#108977) 2023-09-06 15:56:08 +02:00
thread_nt.h gh-81057: Move Threading-Related Globals to _PyRuntimeState (#100084) 2022-12-08 17:50:58 -07:00
thread_pthread.h gh-101538: Add experimental wasi-threads build (#101537) 2023-06-22 11:26:10 -07:00
thread_pthread_stubs.h gh-108765: Cleanup #include in Python/*.c files (#108977) 2023-09-06 15:56:08 +02:00
traceback.c gh-106922: Fix error location for constructs with spaces and parentheses (#108959) 2023-09-08 17:18:35 +01:00
tracemalloc.c gh-108765: Cleanup #include in Python/*.c files (#108977) 2023-09-06 15:56:08 +02:00

README

Miscellaneous source files for the main Python shared library