3#ifndef __NUITKA_HELPER_LISTS_H__
4#define __NUITKA_HELPER_LISTS_H__
7#define PyList_SET_ITEM0(tuple, index, value) \
9 PyObject *tmp = value; \
11 PyList_SET_ITEM(tuple, index, tmp); \
15#define _PyList_ITEMS(op) (((PyListObject *)(op))->ob_item)
18#if PYTHON_VERSION >= 0x3a0
19#define NUITKA_LIST_HAS_FREELIST 1
20extern PyObject *MAKE_LIST_EMPTY(PyThreadState *tstate, Py_ssize_t size);
22#define NUITKA_LIST_HAS_FREELIST 0
24#define MAKE_LIST_EMPTY(tstate, size) PyList_New(size)
27extern bool LIST_EXTEND_FROM_ITERABLE(PyThreadState *tstate, PyObject *list, PyObject *other);
28extern bool LIST_EXTEND_FOR_UNPACK(PyThreadState *tstate, PyObject *list, PyObject *other);
31extern bool LIST_APPEND1(PyObject *target, PyObject *item);
32extern bool LIST_APPEND0(PyObject *target, PyObject *item);
35bool LIST_REMOVE(PyObject *target, PyObject *item);
38extern void LIST_CLEAR(PyObject *target);
41extern void LIST_REVERSE(PyObject *list);
44extern PyObject *LIST_COPY(PyThreadState *tstate, PyObject *list);
47extern PyObject *LIST_COUNT(PyObject *list, PyObject *item);
50extern PyObject *LIST_INDEX2(PyThreadState *tstate, PyObject *list, PyObject *item);
51extern PyObject *LIST_INDEX3(PyThreadState *tstate, PyObject *list, PyObject *item, PyObject *start);
52extern PyObject *LIST_INDEX4(PyThreadState *tstate, PyObject *list, PyObject *item, PyObject *start, PyObject *stop);
55extern bool LIST_INSERT(PyThreadState *tstate, PyObject *list, PyObject *index, PyObject *item);
57extern void LIST_INSERT_CONST(PyObject *list, Py_ssize_t index, PyObject *item);
59extern PyObject *MAKE_LIST(PyThreadState *tstate, PyObject *iterable);
61extern bool LIST_EXTEND_FROM_LIST(PyObject *list, PyObject *other);
63NUITKA_MAY_BE_UNUSED
static PyObject *MAKE_LIST_REPEATED(PyThreadState *tstate, Py_ssize_t size, PyObject *element) {
64 PyObject *result = MAKE_LIST_EMPTY(tstate, size);
66 if (unlikely(result == NULL)) {
70 for (Py_ssize_t i = 0; i < size; i++) {
72 PyList_SET_ITEM(result, i, element);
78#include "lists_generated.h"