summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorHood Chatham <roberthoodchatham@gmail.com>2025-01-12 23:09:39 (GMT)
committerGitHub <noreply@github.com>2025-01-12 23:09:39 (GMT)
commitd0ecbdd838034c1f061e9b4e9b54a900141458c3 (patch)
treedd69daafbb11dce243db45d121be05dace28cf77 /Include
parent5e65a1acc0b630397f1d190aed279114e6e99612 (diff)
downloadcpython-d0ecbdd838034c1f061e9b4e9b54a900141458c3.zip
cpython-d0ecbdd838034c1f061e9b4e9b54a900141458c3.tar.gz
cpython-d0ecbdd838034c1f061e9b4e9b54a900141458c3.tar.bz2
gh-128627: Emscripten: Use wasm-gc based call adaptor if available (#128628)
Replaces the trampoline mechanism in Emscripten with an implementation that uses a recently added feature of wasm-gc instead of JS type reflection, when that feature is available.
Diffstat (limited to 'Include')
-rw-r--r--Include/internal/pycore_emscripten_trampoline.h24
-rw-r--r--Include/internal/pycore_runtime.h2
2 files changed, 7 insertions, 19 deletions
diff --git a/Include/internal/pycore_emscripten_trampoline.h b/Include/internal/pycore_emscripten_trampoline.h
index e519c99..5546ebb 100644
--- a/Include/internal/pycore_emscripten_trampoline.h
+++ b/Include/internal/pycore_emscripten_trampoline.h
@@ -27,24 +27,14 @@
#if defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE)
-void _Py_EmscriptenTrampoline_Init(_PyRuntimeState *runtime);
+void
+_Py_EmscriptenTrampoline_Init(_PyRuntimeState *runtime);
PyObject*
-_PyEM_TrampolineCall_JavaScript(PyCFunctionWithKeywords func,
- PyObject* self,
- PyObject* args,
- PyObject* kw);
-
-PyObject*
-_PyEM_TrampolineCall_Reflection(PyCFunctionWithKeywords func,
- PyObject* self,
- PyObject* args,
- PyObject* kw);
-
-#define _PyEM_TrampolineCall(meth, self, args, kw) \
- ((_PyRuntime.wasm_type_reflection_available) ? \
- (_PyEM_TrampolineCall_Reflection((PyCFunctionWithKeywords)(meth), (self), (args), (kw))) : \
- (_PyEM_TrampolineCall_JavaScript((PyCFunctionWithKeywords)(meth), (self), (args), (kw))))
+_PyEM_TrampolineCall(PyCFunctionWithKeywords func,
+ PyObject* self,
+ PyObject* args,
+ PyObject* kw);
#define _PyCFunction_TrampolineCall(meth, self, args) \
_PyEM_TrampolineCall( \
@@ -62,8 +52,6 @@ _PyEM_TrampolineCall_Reflection(PyCFunctionWithKeywords func,
#else // defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE)
-#define _Py_EmscriptenTrampoline_Init(runtime)
-
#define _PyCFunction_TrampolineCall(meth, self, args) \
(meth)((self), (args))
diff --git a/Include/internal/pycore_runtime.h b/Include/internal/pycore_runtime.h
index 86d0245..cf12379 100644
--- a/Include/internal/pycore_runtime.h
+++ b/Include/internal/pycore_runtime.h
@@ -172,7 +172,7 @@ typedef struct pyruntimestate {
#if defined(__EMSCRIPTEN__) && defined(PY_CALL_TRAMPOLINE)
// Used in "Python/emscripten_trampoline.c" to choose between type
// reflection trampoline and EM_JS trampoline.
- bool wasm_type_reflection_available;
+ int (*emscripten_count_args_function)(PyCFunctionWithKeywords func);
#endif
/* All the objects that are shared by the runtime's interpreters. */