chiark / gitweb /
*.c: Use `PyVarObject_HEAD_INIT' to initialize type object headers.
authorMark Wooding <mdw@distorted.org.uk>
Sun, 20 Oct 2019 23:14:01 +0000 (00:14 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 11 Apr 2020 11:44:14 +0000 (12:44 +0100)
Define a suitable version if the Python headers don't do it for us.

mapping.c
pyke.h

index 4a0d412235fd108f19e1b31840bd4e6e105b7dc6..04616e1a4760764e754fb1ef33241f5ef507470c 100644 (file)
--- 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 e6d465ef080b522f48d09e5c585417f2bc6a76b3..b6a5d8d403b5742e138154204b6227c6378a7c3b 100644 (file)
--- 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. */