Mercurial > cpython-lru_cache-weakref
diff Modules/parsermodule.c @ 47580:94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Wed, 11 Jun 2008 05:26:20 +0000 |
| parents | dd5513b472dc |
| children | 7e56016a6565 |
line wrap: on
line diff
--- a/Modules/parsermodule.c Wed Jun 11 03:41:00 2008 +0000 +++ b/Modules/parsermodule.c Wed Jun 11 05:26:20 2008 +0000 @@ -297,7 +297,7 @@ static char *keywords[] = {"ast", "line_info", "col_info", NULL}; - if (self == NULL) { + if (self == NULL || PyModule_Check(self)) { ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|OO:st2tuple", keywords, &PyST_Type, &self, &line_option, &col_option); @@ -341,7 +341,7 @@ static char *keywords[] = {"ast", "line_info", "col_info", NULL}; - if (self == NULL) + if (self == NULL || PyModule_Check(self)) ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|OO:st2list", keywords, &PyST_Type, &self, &line_option, &col_option); @@ -383,7 +383,7 @@ static char *keywords[] = {"ast", "filename", NULL}; - if (self == NULL) + if (self == NULL || PyModule_Check(self)) ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|s:compilest", keywords, &PyST_Type, &self, &str); else @@ -412,7 +412,7 @@ static char *keywords[] = {"ast", NULL}; - if (self == NULL) + if (self == NULL || PyModule_Check(self)) ok = PyArg_ParseTupleAndKeywords(args, kw, "O!:isexpr", keywords, &PyST_Type, &self); else @@ -435,7 +435,7 @@ static char *keywords[] = {"ast", NULL}; - if (self == NULL) + if (self == NULL || PyModule_Check(self)) ok = PyArg_ParseTupleAndKeywords(args, kw, "O!:issuite", keywords, &PyST_Type, &self); else @@ -3047,33 +3047,45 @@ }; -PyMODINIT_FUNC initparser(void); /* supply a prototype */ + +static struct PyModuleDef parsermodule = { + PyModuleDef_HEAD_INIT, + "parser", + NULL, + -1, + parser_functions, + NULL, + NULL, + NULL, + NULL +}; + +PyMODINIT_FUNC PyInit_parser(void); /* supply a prototype */ PyMODINIT_FUNC -initparser(void) +PyInit_parser(void) { PyObject *module, *copyreg; Py_TYPE(&PyST_Type) = &PyType_Type; - module = Py_InitModule("parser", parser_functions); + module = PyModule_Create(&parsermodule); if (module == NULL) - return; + return NULL; if (parser_error == 0) parser_error = PyErr_NewException("parser.ParserError", NULL, NULL); if (parser_error == 0) - /* caller will check PyErr_Occurred() */ - return; + return NULL; /* CAUTION: The code next used to skip bumping the refcount on - * parser_error. That's a disaster if initparser() gets called more + * parser_error. That's a disaster if PyInit_parser() 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; + return NULL; Py_INCREF(&PyST_Type); PyModule_AddObject(module, "ASTType", (PyObject*)&PyST_Type); @@ -3112,4 +3124,5 @@ Py_XDECREF(pickler); Py_DECREF(copyreg); } + return module; }
