10#include "nuitka/prelude.h"
13PyObject *TO_FLOAT(PyObject *value) {
16#if PYTHON_VERSION < 0x300
17 if (PyString_CheckExact(value)) {
18 result = PyFloat_FromString(value, NULL);
21 if (PyUnicode_CheckExact(value)) {
22 result = PyFloat_FromString(value);
26 result = PyNumber_Float(value);
29 if (unlikely(result == NULL)) {
36#if NUITKA_FLOAT_HAS_FREELIST
38static PyFloatObject *_Nuitka_AllocatePyFloatObject(PyThreadState *tstate) {
41#if PYTHON_VERSION < 0x3d0
42 struct _Py_float_state *state = &tstate->interp->float_state;
43 PyFloatObject **free_list = &state->free_list;
44 int *numfree = &state->numfree;
46 struct _Py_object_freelists *freelists = _Nuitka_object_freelists_GET(tstate);
47 struct _Py_float_freelist *state = &freelists->floats;
48 PyFloatObject **free_list = &state->items;
49 int *numfree = &state->numfree;
51 PyFloatObject *result_float = *free_list;
55 *free_list = (PyFloatObject *)Py_TYPE(result_float);
57 result_float = (PyFloatObject *)NuitkaObject_Malloc(
sizeof(PyFloatObject));
60 Py_SET_TYPE(result_float, &PyFloat_Type);
61 Nuitka_Py_NewReference((PyObject *)result_float);
63 assert(result_float != NULL);
68PyObject *MAKE_FLOAT_FROM_DOUBLE(
double value) {
69 PyThreadState *tstate = PyThreadState_GET();
71 PyFloatObject *result = _Nuitka_AllocatePyFloatObject(tstate);
73 PyFloat_SET_DOUBLE(result, value);
74 return (PyObject *)result;