summaryrefslogtreecommitdiffstats
path: root/Include/tupleobject.h
diff options
context:
space:
mode:
Diffstat (limited to 'Include/tupleobject.h')
-rw-r--r--Include/tupleobject.h29
1 files changed, 21 insertions, 8 deletions
diff --git a/Include/tupleobject.h b/Include/tupleobject.h
index 590902d..a5ab733 100644
--- a/Include/tupleobject.h
+++ b/Include/tupleobject.h
@@ -1,3 +1,4 @@
+
/* Tuple object interface */
#ifndef Py_TUPLEOBJECT_H
@@ -9,7 +10,7 @@ extern "C" {
/*
Another generally useful object type is a tuple of object pointers.
For Python, this is an immutable type. C code can change the tuple items
-(but not their number), and even use tuples as general-purpose arrays of
+(but not their number), and even use tuples are general-purpose arrays of
object references, but in general only brand new tuples should be mutated,
not ones that might already have been exposed to Python code.
@@ -20,8 +21,17 @@ inserted in the tuple. Similarly, PyTuple_GetItem does not increment the
returned item's reference count.
*/
+typedef struct {
+ PyObject_VAR_HEAD
+ PyObject *ob_item[1];
+
+ /* ob_item contains space for 'ob_size' elements.
+ * Items must normally not be NULL, except during construction when
+ * the tuple is not yet visible outside the function that builds it.
+ */
+} PyTupleObject;
+
PyAPI_DATA(PyTypeObject) PyTuple_Type;
-PyAPI_DATA(PyTypeObject) PyTupleIter_Type;
#define PyTuple_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
@@ -32,15 +42,18 @@ PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *);
PyAPI_FUNC(PyObject *) PyTuple_GetItem(PyObject *, Py_ssize_t);
PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *);
PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
+PyAPI_FUNC(int) _PyTuple_Resize(PyObject **, Py_ssize_t);
PyAPI_FUNC(PyObject *) PyTuple_Pack(Py_ssize_t, ...);
+PyAPI_FUNC(void) _PyTuple_MaybeUntrack(PyObject *);
-PyAPI_FUNC(int) PyTuple_ClearFreeList(void);
+/* Macro, trading safety for speed */
+#define PyTuple_GET_ITEM(op, i) (((PyTupleObject *)(op))->ob_item[i])
+#define PyTuple_GET_SIZE(op) Py_SIZE(op)
-#ifndef Py_LIMITED_API
-# define Py_CPYTHON_TUPLEOBJECT_H
-# include "cpython/tupleobject.h"
-# undef Py_CPYTHON_TUPLEOBJECT_H
-#endif
+/* Macro, *only* to be used to fill in brand new tuples */
+#define PyTuple_SET_ITEM(op, i, v) (((PyTupleObject *)(op))->ob_item[i] = v)
+
+PyAPI_FUNC(int) PyTuple_ClearFreeList(void);
#ifdef __cplusplus
}