diff options
Diffstat (limited to 'Python/sysmodule.c')
-rw-r--r-- | Python/sysmodule.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/Python/sysmodule.c b/Python/sysmodule.c index e650444108e..00dce4527fb 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -3986,6 +3986,71 @@ error: PyObject *_Py_CreateMonitoringObject(void); +/*[clinic input] +module _jit +[clinic start generated code]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=10952f74d7bbd972]*/ + +PyDoc_STRVAR(_jit_doc, "Utilities for observing just-in-time compilation."); + +/*[clinic input] +_jit.is_available -> bool +Return True if the current Python executable supports JIT compilation, and False otherwise. +[clinic start generated code]*/ + +static int +_jit_is_available_impl(PyObject *module) +/*[clinic end generated code: output=6849a9cd2ff4aac9 input=03add84aa8347cf1]*/ +{ + (void)module; +#ifdef _Py_TIER2 + return true; +#else + return false; +#endif +} + +/*[clinic input] +_jit.is_enabled -> bool +Return True if JIT compilation is enabled for the current Python process (implies sys._jit.is_available()), and False otherwise. +[clinic start generated code]*/ + +static int +_jit_is_enabled_impl(PyObject *module) +/*[clinic end generated code: output=55865f8de993fe42 input=02439394da8e873f]*/ +{ + (void)module; + return _PyInterpreterState_GET()->jit; +} + +/*[clinic input] +_jit.is_active -> bool +Return True if the topmost Python frame is currently executing JIT code (implies sys._jit.is_enabled()), and False otherwise. +[clinic start generated code]*/ + +static int +_jit_is_active_impl(PyObject *module) +/*[clinic end generated code: output=7facca06b10064d4 input=be2fcd8a269d9b72]*/ +{ + (void)module; + return _PyThreadState_GET()->current_executor != NULL; +} + +static PyMethodDef _jit_methods[] = { + _JIT_IS_AVAILABLE_METHODDEF + _JIT_IS_ENABLED_METHODDEF + _JIT_IS_ACTIVE_METHODDEF + {NULL} +}; + +static struct PyModuleDef _jit_module = { + PyModuleDef_HEAD_INIT, + .m_name = "sys._jit", + .m_doc = _jit_doc, + .m_size = -1, + .m_methods = _jit_methods, +}; + /* Create sys module without all attributes. _PySys_UpdateConfig() should be called later to add remaining attributes. */ PyStatus @@ -4047,6 +4112,16 @@ _PySys_Create(PyThreadState *tstate, PyObject **sysmod_p) goto error; } + PyObject *_jit = _PyModule_CreateInitialized(&_jit_module, PYTHON_API_VERSION); + if (_jit == NULL) { + goto error; + } + err = PyDict_SetItemString(sysdict, "_jit", _jit); + Py_DECREF(_jit); + if (err) { + goto error; + } + assert(!_PyErr_Occurred(tstate)); *sysmod_p = sysmod; |