'spam',
10,
-10,
+ True,
+ False,
100.0,
]
for obj in shareables:
not_shareables = [
# singletons
- True,
- False,
NotImplemented,
...,
# builtin types and objects
with self.assertRaises(OverflowError):
_testinternalcapi.get_crossinterp_data(i)
+ def test_bool(self):
+ self._assert_values([True, False])
+
def test_float(self):
self._assert_values([0.0, 1.1, -1.0, 0.12345678, -0.12345678])
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)
{
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");