summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>2024-06-24 09:23:38 (GMT)
committerGitHub <noreply@github.com>2024-06-24 09:23:38 (GMT)
commit65a12c559cbc13c2c5a4aa65c76310bd8d2051a7 (patch)
treeb244c6b535201b29b5e5e1ecaede6bc89ad4170f /Include
parentc38e2f64d012929168dfef7363c9e48bd1a6c731 (diff)
downloadcpython-65a12c559cbc13c2c5a4aa65c76310bd8d2051a7.zip
cpython-65a12c559cbc13c2c5a4aa65c76310bd8d2051a7.tar.gz
cpython-65a12c559cbc13c2c5a4aa65c76310bd8d2051a7.tar.bz2
gh-120834: fix type of *_iframe field in _PyGenObject_HEAD declaration (#120835)
Diffstat (limited to 'Include')
-rw-r--r--Include/cpython/genobject.h33
-rw-r--r--Include/internal/pycore_frame.h8
-rw-r--r--Include/internal/pycore_genobject.h44
-rw-r--r--Include/internal/pycore_interp.h2
4 files changed, 47 insertions, 40 deletions
diff --git a/Include/cpython/genobject.h b/Include/cpython/genobject.h
index 49e46c2..f75884e 100644
--- a/Include/cpython/genobject.h
+++ b/Include/cpython/genobject.h
@@ -9,29 +9,7 @@ extern "C" {
/* --- Generators --------------------------------------------------------- */
-/* _PyGenObject_HEAD defines the initial segment of generator
- and coroutine objects. */
-#define _PyGenObject_HEAD(prefix) \
- PyObject_HEAD \
- /* List of weak reference. */ \
- PyObject *prefix##_weakreflist; \
- /* Name of the generator. */ \
- PyObject *prefix##_name; \
- /* Qualified name of the generator. */ \
- PyObject *prefix##_qualname; \
- _PyErr_StackItem prefix##_exc_state; \
- PyObject *prefix##_origin_or_finalizer; \
- char prefix##_hooks_inited; \
- char prefix##_closed; \
- char prefix##_running_async; \
- /* The frame */ \
- int8_t prefix##_frame_state; \
- PyObject *prefix##_iframe[1]; \
-
-typedef struct {
- /* The gi_ prefix is intended to remind of generator-iterator. */
- _PyGenObject_HEAD(gi)
-} PyGenObject;
+typedef struct _PyGenObject PyGenObject;
PyAPI_DATA(PyTypeObject) PyGen_Type;
@@ -46,9 +24,7 @@ PyAPI_FUNC(PyCodeObject *) PyGen_GetCode(PyGenObject *gen);
/* --- PyCoroObject ------------------------------------------------------- */
-typedef struct {
- _PyGenObject_HEAD(cr)
-} PyCoroObject;
+typedef struct _PyCoroObject PyCoroObject;
PyAPI_DATA(PyTypeObject) PyCoro_Type;
@@ -59,9 +35,7 @@ PyAPI_FUNC(PyObject *) PyCoro_New(PyFrameObject *,
/* --- Asynchronous Generators -------------------------------------------- */
-typedef struct {
- _PyGenObject_HEAD(ag)
-} PyAsyncGenObject;
+typedef struct _PyAsyncGenObject PyAsyncGenObject;
PyAPI_DATA(PyTypeObject) PyAsyncGen_Type;
PyAPI_DATA(PyTypeObject) _PyAsyncGenASend_Type;
@@ -73,7 +47,6 @@ PyAPI_FUNC(PyObject *) PyAsyncGen_New(PyFrameObject *,
#define PyAsyncGenASend_CheckExact(op) Py_IS_TYPE((op), &_PyAsyncGenASend_Type)
-
#undef _PyGenObject_HEAD
#ifdef __cplusplus
diff --git a/Include/internal/pycore_frame.h b/Include/internal/pycore_frame.h
index e4eb893..bab92c7 100644
--- a/Include/internal/pycore_frame.h
+++ b/Include/internal/pycore_frame.h
@@ -307,14 +307,6 @@ _PyFrame_PushTrampolineUnchecked(PyThreadState *tstate, PyCodeObject *code, int
return frame;
}
-static inline
-PyGenObject *_PyFrame_GetGenerator(_PyInterpreterFrame *frame)
-{
- assert(frame->owner == FRAME_OWNED_BY_GENERATOR);
- size_t offset_in_gen = offsetof(PyGenObject, gi_iframe);
- return (PyGenObject *)(((char *)frame) - offset_in_gen);
-}
-
PyAPI_FUNC(_PyInterpreterFrame *)
_PyEvalFramePushAndInit(PyThreadState *tstate, PyFunctionObject *func,
PyObject *locals, PyObject* const* args,
diff --git a/Include/internal/pycore_genobject.h b/Include/internal/pycore_genobject.h
index 9463c82..f6d7e6d 100644
--- a/Include/internal/pycore_genobject.h
+++ b/Include/internal/pycore_genobject.h
@@ -8,7 +8,49 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
-#include "pycore_freelist.h"
+#include "pycore_frame.h"
+
+/* _PyGenObject_HEAD defines the initial segment of generator
+ and coroutine objects. */
+#define _PyGenObject_HEAD(prefix) \
+ PyObject_HEAD \
+ /* List of weak reference. */ \
+ PyObject *prefix##_weakreflist; \
+ /* Name of the generator. */ \
+ PyObject *prefix##_name; \
+ /* Qualified name of the generator. */ \
+ PyObject *prefix##_qualname; \
+ _PyErr_StackItem prefix##_exc_state; \
+ PyObject *prefix##_origin_or_finalizer; \
+ char prefix##_hooks_inited; \
+ char prefix##_closed; \
+ char prefix##_running_async; \
+ /* The frame */ \
+ int8_t prefix##_frame_state; \
+ struct _PyInterpreterFrame prefix##_iframe; \
+
+struct _PyGenObject {
+ /* The gi_ prefix is intended to remind of generator-iterator. */
+ _PyGenObject_HEAD(gi)
+};
+
+struct _PyCoroObject {
+ _PyGenObject_HEAD(cr)
+};
+
+struct _PyAsyncGenObject {
+ _PyGenObject_HEAD(ag)
+};
+
+#undef _PyGenObject_HEAD
+
+static inline
+PyGenObject *_PyGen_GetGeneratorFromFrame(_PyInterpreterFrame *frame)
+{
+ assert(frame->owner == FRAME_OWNED_BY_GENERATOR);
+ size_t offset_in_gen = offsetof(PyGenObject, gi_iframe);
+ return (PyGenObject *)(((char *)frame) - offset_in_gen);
+}
PyAPI_FUNC(PyObject *)_PyGen_yf(PyGenObject *);
extern void _PyGen_Finalize(PyObject *self);
diff --git a/Include/internal/pycore_interp.h b/Include/internal/pycore_interp.h
index 6b5f50b..b40b63a 100644
--- a/Include/internal/pycore_interp.h
+++ b/Include/internal/pycore_interp.h
@@ -23,7 +23,7 @@ extern "C" {
#include "pycore_floatobject.h" // struct _Py_float_state
#include "pycore_function.h" // FUNC_MAX_WATCHERS
#include "pycore_gc.h" // struct _gc_runtime_state
-#include "pycore_genobject.h" // struct _Py_async_gen_state
+#include "pycore_genobject.h" // _PyGen_FetchStopIterationValue
#include "pycore_global_objects.h"// struct _Py_interp_cached_objects
#include "pycore_import.h" // struct _import_state
#include "pycore_instruments.h" // _PY_MONITORING_EVENTS