initparser()) instead of statically (in the initializer). The static
initialization, using the address of an object in a different DLL, is
too much for the Microsoft VC++ compiler, and we want to be able to
build this module as a separate DLL (it's nice to have but we don't
want to increase the core DLL's size by 25K). This same trick has
been applied to a number of modules, e.g. NumPy and _tkinter.
/* static */
PyTypeObject PyAST_Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"ast", /* tp_name */
sizeof(PyAST_Object), /* tp_basicsize */
void
initparser()
{
- PyObject* module = Py_InitModule("parser", parser_functions);
- PyObject* dict = PyModule_GetDict(module);
+ PyObject* module;
+ PyObject* dict;
+
+ PyAST_Type.ob_type = &PyType_Type;
+ module = Py_InitModule("parser", parser_functions);
+ dict = PyModule_GetDict(module);
parser_error = PyString_FromString("parser.ParserError");