Mercurial > cpython-lru_cache-weakref
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);
