diff Modules/parsermodule.c @ 29952:1cbc6b7836dc legacy-trunk

Merge 23c1-branch back into the head. Barry will send email about the New Plan (releases to be made off the head, ongoing random 2.4 stuff to be done on a short-lived branch, provided anyone is motivated enough to create one).
author Tim Peters <tim.peters@gmail.com>
date Mon, 21 Jul 2003 14:25:23 +0000
parents 9acdc6c4416a
children 86fdf8fe7f17
line wrap: on
line diff
--- a/Modules/parsermodule.c	Mon Jul 21 12:49:46 2003 +0000
+++ b/Modules/parsermodule.c	Mon Jul 21 14:25:23 2003 +0000
@@ -106,7 +106,7 @@
             }
             (void) addelem(v, i+1, w);
         }
-	
+
         if (TYPE(n) == encoding_decl)
             (void) addelem(v, i+1, PyString_FromString(STR(n)));
         return (v);
@@ -2904,11 +2904,19 @@
     if (parser_error == 0)
         parser_error = PyErr_NewException("parser.ParserError", NULL, NULL);
 
-    if ((parser_error == 0)
-        || (PyModule_AddObject(module, "ParserError", parser_error) != 0)) {
+    if (parser_error == 0)
         /* caller will check PyErr_Occurred() */
         return;
-    }
+    /* CAUTION:  The code next used to skip bumping the refcount on
+     * parser_error.  That's a disaster if initparser() gets called more
+     * than once.  By incref'ing, we ensure that each module dict that
+     * gets created owns its reference to the shared parser_error object,
+     * and the file static parser_error vrbl owns a reference too.
+     */
+    Py_INCREF(parser_error);
+    if (PyModule_AddObject(module, "ParserError", parser_error) != 0)
+        return;
+
     Py_INCREF(&PyST_Type);
     PyModule_AddObject(module, "ASTType", (PyObject*)&PyST_Type);
     Py_INCREF(&PyST_Type);