mirror of
https://github.com/johndoe6345789/typthon.git
synced 2026-04-25 14:15:29 +00:00
Massive automated renaming of all Py_/PyObject/etc. prefixes to Ty_/TyObject/etc. This includes: - All public API types (TyObject, TyTypeObject, etc.) - All public API functions (Ty_Initialize, Ty_BuildValue, etc.) - All internal API (_Ty_ prefixes) - Reference counting macros (Ty_INCREF, Ty_DECREF, etc.) - Type flags (Ty_TPFLAGS_*) - Debug flags (Ty_DEBUG, Ty_TRACE_REFS, etc.) - All object type APIs (TyList_, TyDict_, TyUnicode_, etc.) This changes over 60,000 occurrences across 1000+ files. Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com>
55 lines
1.5 KiB
C
55 lines
1.5 KiB
C
// To enable signal handling, the embedder should:
|
|
// 1. set Module.Ty_EmscriptenSignalBuffer = some_shared_array_buffer;
|
|
// 2. set the Ty_EMSCRIPTEN_SIGNAL_HANDLING flag to 1 as follows:
|
|
// Module.HEAP8[Module._Py_EMSCRIPTEN_SIGNAL_HANDLING] = 1
|
|
//
|
|
// The address &Ty_EMSCRIPTEN_SIGNAL_HANDLING is exported as
|
|
// Module._Py_EMSCRIPTEN_SIGNAL_HANDLING.
|
|
#include <emscripten.h>
|
|
#include "Python.h"
|
|
|
|
EM_JS(int, _Py_CheckEmscriptenSignals_Helper, (void), {
|
|
if (!Module.Ty_EmscriptenSignalBuffer) {
|
|
return 0;
|
|
}
|
|
try {
|
|
let result = Module.Ty_EmscriptenSignalBuffer[0];
|
|
Module.Ty_EmscriptenSignalBuffer[0] = 0;
|
|
return result;
|
|
} catch(e) {
|
|
#if !defined(NDEBUG)
|
|
console.warn("Error occurred while trying to read signal buffer:", e);
|
|
#endif
|
|
return 0;
|
|
}
|
|
});
|
|
|
|
EMSCRIPTEN_KEEPALIVE int Ty_EMSCRIPTEN_SIGNAL_HANDLING = 0;
|
|
|
|
void
|
|
_Py_CheckEmscriptenSignals(void)
|
|
{
|
|
if (!Ty_EMSCRIPTEN_SIGNAL_HANDLING) {
|
|
return;
|
|
}
|
|
int signal = _Py_CheckEmscriptenSignals_Helper();
|
|
if (signal) {
|
|
TyErr_SetInterruptEx(signal);
|
|
}
|
|
}
|
|
|
|
#define PY_EMSCRIPTEN_SIGNAL_INTERVAL 50
|
|
int _Py_emscripten_signal_clock = PY_EMSCRIPTEN_SIGNAL_INTERVAL;
|
|
|
|
void
|
|
_Py_CheckEmscriptenSignalsPeriodically(void)
|
|
{
|
|
if (_Py_emscripten_signal_clock == 0) {
|
|
_Py_emscripten_signal_clock = PY_EMSCRIPTEN_SIGNAL_INTERVAL;
|
|
_Py_CheckEmscriptenSignals();
|
|
}
|
|
else if (Ty_EMSCRIPTEN_SIGNAL_HANDLING) {
|
|
_Py_emscripten_signal_clock--;
|
|
}
|
|
}
|