(root)/
Python-3.11.7/
Include/
cpython/
listobject.h
       1  #ifndef Py_CPYTHON_LISTOBJECT_H
       2  #  error "this header file must not be included directly"
       3  #endif
       4  
       5  typedef struct {
       6      PyObject_VAR_HEAD
       7      /* Vector of pointers to list elements.  list[0] is ob_item[0], etc. */
       8      PyObject **ob_item;
       9  
      10      /* ob_item contains space for 'allocated' elements.  The number
      11       * currently in use is ob_size.
      12       * Invariants:
      13       *     0 <= ob_size <= allocated
      14       *     len(list) == ob_size
      15       *     ob_item == NULL implies ob_size == allocated == 0
      16       * list.sort() temporarily sets allocated to -1 to detect mutations.
      17       *
      18       * Items must normally not be NULL, except during construction when
      19       * the list is not yet visible outside the function that builds it.
      20       */
      21      Py_ssize_t allocated;
      22  } PyListObject;
      23  
      24  PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *);
      25  PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out);
      26  
      27  /* Cast argument to PyListObject* type. */
      28  #define _PyList_CAST(op) \
      29      (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
      30  
      31  // Macros and static inline functions, trading safety for speed
      32  
      33  static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
      34      PyListObject *list = _PyList_CAST(op);
      35      return Py_SIZE(list);
      36  }
      37  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
      38  #  define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
      39  #endif
      40  
      41  #define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[index])
      42  
      43  static inline void
      44  PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
      45      PyListObject *list = _PyList_CAST(op);
      46      list->ob_item[index] = value;
      47  }
      48  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
      49  #define PyList_SET_ITEM(op, index, value) \
      50      PyList_SET_ITEM(_PyObject_CAST(op), index, _PyObject_CAST(value))
      51  #endif