]> granicus.if.org Git - python/commitdiff
Initialize the ob_type field of PyAST_Type dynamically (in
authorGuido van Rossum <guido@python.org>
Thu, 23 Jan 1997 23:29:44 +0000 (23:29 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 23 Jan 1997 23:29:44 +0000 (23:29 +0000)
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.

Modules/parsermodule.c

index 7a23d8d9ae4ed7e6ca3a007519553c8309a12d64..4167eb10cedb381644b277d8c2e43ce355b9dd87 100644 (file)
@@ -197,7 +197,7 @@ staticforward int  parser_compare Py_PROTO((PyAST_Object *left,
 /* static */
 PyTypeObject PyAST_Type = {
 
-    PyObject_HEAD_INIT(&PyType_Type)
+    PyObject_HEAD_INIT(NULL)
     0,
     "ast",                             /* tp_name              */
     sizeof(PyAST_Object),              /* tp_basicsize         */
@@ -2593,8 +2593,12 @@ static PyMethodDef parser_functions[] =  {
 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");