Skip to content
Snippets Groups Projects
Commit 48e42f984074 authored by Adrian Buehlmann's avatar Adrian Buehlmann
Browse files

parsers: statically initializing tp_new to PyType_GenericNew is not portable

As detailed on http://docs.python.org/extending/newtypes.html (quote):

  "In this case, we can just use the default implementation provided by the API
  function PyType_GenericNew(). We’d like to just assign this to the
  tp_new slot, but we can’t, for portability sake. On some platforms or
  compilers, we can’t statically initialize a structure member with a function
  defined in another C module, so, instead, we’ll assign the tp_new slot in the
  module initialization function just before calling PyType_Ready()."

Fixes "gcc (GCC) 3.4.5 (mingw-vista special r3)" complaining with:

  mercurial/parsers.c:1096: error: initializer element is not constant
  mercurial/parsers.c:1096: error: (near initialization for `indexType.tp_new')
parent 20a9d823f242
No related branches found
No related tags found
No related merge requests found
......@@ -1092,7 +1092,6 @@
0, /* tp_dictoffset */
(initproc)index_init, /* tp_init */
0, /* tp_alloc */
PyType_GenericNew, /* tp_new */
};
/*
......@@ -1150,6 +1149,7 @@
static void module_init(PyObject *mod)
{
indexType.tp_new = PyType_GenericNew;
if (PyType_Ready(&indexType) < 0)
return;
Py_INCREF(&indexType);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment