Mercurial > hg-stable
changeset 16604:48e42f984074 stable
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')
author | Adrian Buehlmann <adrian@cadifra.com> |
---|---|
date | Tue, 08 May 2012 11:20:07 +0200 |
parents | 20a9d823f242 |
children | 54fc9796d75b |
files | mercurial/parsers.c |
diffstat | 1 files changed, 1 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/parsers.c Mon May 07 21:49:45 2012 +0200 +++ b/mercurial/parsers.c Tue May 08 11:20:07 2012 +0200 @@ -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);