Skip to content

Commit 54ba556

Browse files
authored
bpo-35134: Create Include/cpython/tupleobject.h (GH-10764)
Move tupleobject.h code surrounded by "#ifndef Py_LIMITED_API" to a new Include/cpython/tupleobject.h header file. Add cpython/ header files to Makefile.pre.in and pythoncore project of PCbuild.
1 parent bde9d6b commit 54ba556

File tree

5 files changed

+81
-33
lines changed

5 files changed

+81
-33
lines changed

Include/cpython/tupleobject.h

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#ifndef Py_CPYTHON_TUPLEOBJECT_H
2+
# error "this header file must not be included directly"
3+
#endif
4+
5+
#ifdef __cplusplus
6+
extern "C" {
7+
#endif
8+
9+
typedef struct {
10+
PyObject_VAR_HEAD
11+
/* ob_item contains space for 'ob_size' elements.
12+
Items must normally not be NULL, except during construction when
13+
the tuple is not yet visible outside the function that builds it. */
14+
PyObject *ob_item[1];
15+
} PyTupleObject;
16+
17+
PyAPI_FUNC(int) _PyTuple_Resize(PyObject **, Py_ssize_t);
18+
PyAPI_FUNC(void) _PyTuple_MaybeUntrack(PyObject *);
19+
20+
/* Macros trading safety for speed */
21+
22+
/* Cast argument to PyTupleObject* type. */
23+
#define _PyTuple_CAST(op) (assert(PyTuple_Check(op)), (PyTupleObject *)(op))
24+
25+
#define PyTuple_GET_SIZE(op) Py_SIZE(_PyTuple_CAST(op))
26+
27+
#define PyTuple_GET_ITEM(op, i) (_PyTuple_CAST(op)->ob_item[i])
28+
29+
/* Macro, *only* to be used to fill in brand new tuples */
30+
#define PyTuple_SET_ITEM(op, i, v) (_PyTuple_CAST(op)->ob_item[i] = v)
31+
32+
PyAPI_FUNC(void) _PyTuple_DebugMallocStats(FILE *out);
33+
34+
#ifdef __cplusplus
35+
}
36+
#endif

Include/tupleobject.h

Lines changed: 5 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
/* Tuple object interface */
32

43
#ifndef Py_TUPLEOBJECT_H
@@ -21,18 +20,6 @@ inserted in the tuple. Similarly, PyTuple_GetItem does not increment the
2120
returned item's reference count.
2221
*/
2322

24-
#ifndef Py_LIMITED_API
25-
typedef struct {
26-
PyObject_VAR_HEAD
27-
PyObject *ob_item[1];
28-
29-
/* ob_item contains space for 'ob_size' elements.
30-
* Items must normally not be NULL, except during construction when
31-
* the tuple is not yet visible outside the function that builds it.
32-
*/
33-
} PyTupleObject;
34-
#endif
35-
3623
PyAPI_DATA(PyTypeObject) PyTuple_Type;
3724
PyAPI_DATA(PyTypeObject) PyTupleIter_Type;
3825

@@ -45,30 +32,15 @@ PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *);
4532
PyAPI_FUNC(PyObject *) PyTuple_GetItem(PyObject *, Py_ssize_t);
4633
PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *);
4734
PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
48-
#ifndef Py_LIMITED_API
49-
PyAPI_FUNC(int) _PyTuple_Resize(PyObject **, Py_ssize_t);
50-
#endif
5135
PyAPI_FUNC(PyObject *) PyTuple_Pack(Py_ssize_t, ...);
52-
#ifndef Py_LIMITED_API
53-
PyAPI_FUNC(void) _PyTuple_MaybeUntrack(PyObject *);
54-
#endif
55-
56-
/* Macro, trading safety for speed */
57-
#ifndef Py_LIMITED_API
58-
/* Cast argument to PyTupleObject* type. */
59-
#define _PyTuple_CAST(op) (assert(PyTuple_Check(op)), (PyTupleObject *)(op))
60-
61-
#define PyTuple_GET_ITEM(op, i) (_PyTuple_CAST(op)->ob_item[i])
62-
#define PyTuple_GET_SIZE(op) Py_SIZE(_PyTuple_CAST(op))
63-
64-
/* Macro, *only* to be used to fill in brand new tuples */
65-
#define PyTuple_SET_ITEM(op, i, v) (_PyTuple_CAST(op)->ob_item[i] = v)
66-
#endif
6736

6837
PyAPI_FUNC(int) PyTuple_ClearFreeList(void);
38+
6939
#ifndef Py_LIMITED_API
70-
PyAPI_FUNC(void) _PyTuple_DebugMallocStats(FILE *out);
71-
#endif /* Py_LIMITED_API */
40+
# define Py_CPYTHON_TUPLEOBJECT_H
41+
# include "cpython/tupleobject.h"
42+
# undef Py_CPYTHON_TUPLEOBJECT_H
43+
#endif
7244

7345
#ifdef __cplusplus
7446
}

Makefile.pre.in

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1027,7 +1027,15 @@ PYTHON_HEADERS= \
10271027
$(PARSER_HEADERS) \
10281028
$(srcdir)/Include/Python-ast.h \
10291029
\
1030+
$(srcdir)/Include/cpython/abstract.h \
1031+
$(srcdir)/Include/cpython/dictobject.h \
1032+
$(srcdir)/Include/cpython/object.h \
10301033
$(srcdir)/Include/cpython/objimpl.h \
1034+
$(srcdir)/Include/cpython/pyerrors.h \
1035+
$(srcdir)/Include/cpython/pylifecycle.h \
1036+
$(srcdir)/Include/cpython/pystate.h \
1037+
$(srcdir)/Include/cpython/tupleobject.h \
1038+
$(srcdir)/Include/cpython/unicodeobject.h \
10311039
\
10321040
$(srcdir)/Include/internal/pycore_accu.h \
10331041
$(srcdir)/Include/internal/pycore_atomic.h \

PCbuild/pythoncore.vcxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,15 @@
9595
<ClInclude Include="..\Include\complexobject.h" />
9696
<ClInclude Include="..\Include\context.h" />
9797
<ClInclude Include="..\Include\coreconfig.h" />
98+
<ClInclude Include="..\Include\cpython\abstract.h" />
99+
<ClInclude Include="..\Include\cpython\dictobject.h" />
100+
<ClInclude Include="..\Include\cpython\object.h" />
98101
<ClInclude Include="..\Include\cpython\objimpl.h" />
102+
<ClInclude Include="..\Include\cpython\pyerrors.h" />
103+
<ClInclude Include="..\Include\cpython\pylifecycle.h" />
104+
<ClInclude Include="..\Include\cpython\pystate.h" />
105+
<ClInclude Include="..\Include\cpython\tupleobject.h" />
106+
<ClInclude Include="..\Include\cpython\unicodeobject.h" />
99107
<ClInclude Include="..\Include\datetime.h" />
100108
<ClInclude Include="..\Include\descrobject.h" />
101109
<ClInclude Include="..\Include\dictobject.h" />

PCbuild/pythoncore.vcxproj.filters

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,33 @@
8484
<ClInclude Include="..\Include\coreconfig.h">
8585
<Filter>Include</Filter>
8686
</ClInclude>
87+
<ClInclude Include="..\Include\cpython\abstract.h">
88+
<Filter>Include</Filter>
89+
</ClInclude>
90+
<ClInclude Include="..\Include\cpython\dictobject.h">
91+
<Filter>Include</Filter>
92+
</ClInclude>
93+
<ClInclude Include="..\Include\cpython\object.h">
94+
<Filter>Include</Filter>
95+
</ClInclude>
8796
<ClInclude Include="..\Include\cpython\objimpl.h">
8897
<Filter>Include</Filter>
8998
</ClInclude>
99+
<ClInclude Include="..\Include\cpython\pyerrors.h">
100+
<Filter>Include</Filter>
101+
</ClInclude>
102+
<ClInclude Include="..\Include\cpython\pylifecycle.h">
103+
<Filter>Include</Filter>
104+
</ClInclude>
105+
<ClInclude Include="..\Include\cpython\pystate.h">
106+
<Filter>Include</Filter>
107+
</ClInclude>
108+
<ClInclude Include="..\Include\cpython\tupleobject.h">
109+
<Filter>Include</Filter>
110+
</ClInclude>
111+
<ClInclude Include="..\Include\cpython\unicodeobject.h">
112+
<Filter>Include</Filter>
113+
</ClInclude>
90114
<ClInclude Include="..\Include\datetime.h">
91115
<Filter>Include</Filter>
92116
</ClInclude>

0 commit comments

Comments
 (0)