mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
GH-111435: Add Support for Sharing True and False Between Interpreters (gh-111436)
This only affects users of the APIs in pycore_crossinterp.h (AKA _xxsubinterpretersmodule.c and _xxinterpchannels.c).
This commit is contained in:
parent
9322ce90ac
commit
230e8e924d
4 changed files with 33 additions and 4 deletions
|
@ -693,6 +693,26 @@ _none_shared(PyThreadState *tstate, PyObject *obj,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
_new_bool_object(_PyCrossInterpreterData *data)
|
||||
{
|
||||
if (data->data){
|
||||
Py_RETURN_TRUE;
|
||||
}
|
||||
Py_RETURN_FALSE;
|
||||
}
|
||||
|
||||
static int
|
||||
_bool_shared(PyThreadState *tstate, PyObject *obj,
|
||||
_PyCrossInterpreterData *data)
|
||||
{
|
||||
_PyCrossInterpreterData_Init(data, tstate->interp,
|
||||
(void *) (Py_IsTrue(obj) ? (uintptr_t) 1 : (uintptr_t) 0), NULL,
|
||||
_new_bool_object);
|
||||
// data->obj and data->free remain NULL
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
_register_builtins_for_crossinterpreter_data(struct _xidregistry *xidregistry)
|
||||
{
|
||||
|
@ -716,6 +736,11 @@ _register_builtins_for_crossinterpreter_data(struct _xidregistry *xidregistry)
|
|||
Py_FatalError("could not register str for cross-interpreter sharing");
|
||||
}
|
||||
|
||||
// bool
|
||||
if (_xidregistry_add_type(xidregistry, &PyBool_Type, _bool_shared) != 0) {
|
||||
Py_FatalError("could not register bool for cross-interpreter sharing");
|
||||
}
|
||||
|
||||
// float
|
||||
if (_xidregistry_add_type(xidregistry, &PyFloat_Type, _float_shared) != 0) {
|
||||
Py_FatalError("could not register float for cross-interpreter sharing");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue