From 96936b4a526f1960f06caeecfc0a917303209ac5 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Mon, 21 Oct 2019 00:14:01 +0100 Subject: [PATCH] *.c: Use `PyVarObject_HEAD_INIT' to initialize type object headers. Define a suitable version if the Python headers don't do it for us. --- mapping.c | 6 +++--- pyke.h | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/mapping.c b/mapping.c index 4a0d412..04616e1 100644 --- a/mapping.c +++ b/mapping.c @@ -90,7 +90,7 @@ static PyObject *keyiter_pynext(PyObject *me) } static const PyTypeObject keyiter_pytype_skel = { - PyObject_HEAD_INIT(0) 0, /* Header */ + PyVarObject_HEAD_INIT(0, 0) /* Header */ "_KeyIter", /* @tp_name@ */ sizeof(iter_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -148,7 +148,7 @@ static PyObject *valiter_pynext(PyObject *me) } static const PyTypeObject valiter_pytype_skel = { - PyObject_HEAD_INIT(0) 0, /* Header */ + PyVarObject_HEAD_INIT(0, 0) /* Header */ "_ValueIter", /* @tp_name@ */ sizeof(iter_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -210,7 +210,7 @@ static PyObject *itemiter_pynext(PyObject *me) } static const PyTypeObject itemiter_pytype_skel = { - PyObject_HEAD_INIT(0) 0, /* Header */ + PyVarObject_HEAD_INIT(0, 0) /* Header */ "_ItemIter", /* @tp_name@ */ sizeof(iter_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ diff --git a/pyke.h b/pyke.h index e6d465e..b6a5d8d 100644 --- a/pyke.h +++ b/pyke.h @@ -74,6 +74,14 @@ PRIVATE_SYMBOLS; # define Py_SIZE(obj) (((PyVarObject *)(obj))->ob_size) #endif +/* Python 3 added internal structure to the various object headers, and + * defined a new macro `PyVarObject_HEAD_INIT' to initialize variable-length + * static instances correctly. Define it if it's not already here. + */ +#ifndef PyVarObject_HEAD_INIT +# define PyVarObject_HEAD_INIT(super, sz) PyObject_HEAD_INIT(super) sz, +#endif + /*----- Utilities for returning values and exceptions ---------------------*/ /* Returning values. */ -- 2.11.0