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 >= 0x3d0
17 struct _Py_object_freelists *freelists = _Nuitka_object_freelists_GET(tstate);
18 PySliceObject **slice_cache_ptr = &freelists->slices.slice_cache;
20 PyInterpreterState *interp = tstate->interp;
21 PySliceObject **slice_cache_ptr = &interp->slice_cache;
24 if (*slice_cache_ptr != NULL) {
25 result_slice = *slice_cache_ptr;
26 *slice_cache_ptr = NULL;
28 Nuitka_Py_NewReference((PyObject *)result_slice);
30 result_slice = (PySliceObject *)Nuitka_GC_New(&PySlice_Type);
32 if (result_slice == NULL) {
48 result_slice->step = step;
50 result_slice->start = start;
52 result_slice->stop = stop;
54 Nuitka_GC_Track(result_slice);
56 return (PyObject *)result_slice;