8#include "nuitka/prelude.h"
11#if PYTHON_VERSION >= 0x3a0
13PyObject *Nuitka_Slice_New(PyThreadState *tstate, PyObject *start, PyObject *stop, PyObject *step) {
14 PySliceObject *result_slice;
16#if PYTHON_VERSION >= 0x3e0
17 result_slice = (PySliceObject *)Nuitka_PyFreeList_Pop(&_Py_freelists_GET()->slices);
19 if (result_slice == NULL) {
20 result_slice = (PySliceObject *)Nuitka_GC_New(&PySlice_Type);
22 Nuitka_Py_NewReference((PyObject *)result_slice);
25#if PYTHON_VERSION >= 0x3d0
26 struct _Py_object_freelists *freelists = _Nuitka_object_freelists_GET(tstate);
27 PySliceObject **slice_cache_ptr = &freelists->slices.slice_cache;
29 PyInterpreterState *interp = tstate->interp;
30 PySliceObject **slice_cache_ptr = &interp->slice_cache;
33 if (*slice_cache_ptr != NULL) {
34 result_slice = *slice_cache_ptr;
35 *slice_cache_ptr = NULL;
37 Nuitka_Py_NewReference((PyObject *)result_slice);
39 result_slice = (PySliceObject *)Nuitka_GC_New(&PySlice_Type);
53 CHECK_OBJECT(result_slice);
54 assert(PySlice_Check(result_slice));
57 result_slice->step = step;
59 result_slice->start = start;
61 result_slice->stop = stop;
63 Nuitka_GC_Track(result_slice);
65 return (PyObject *)result_slice;