diff options
author | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2008-07-02 21:41:01 (GMT) |
---|---|---|
committer | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2008-07-02 21:41:01 (GMT) |
commit | ba4105c1335503e3d441abbd7a3e74d255ead1a5 (patch) | |
tree | bc5410e38b50797d7471fcbdbe359787fafc0c04 /Modules/pyexpat.c | |
parent | e43d33a4db0c0c9afcb70a26f682abfe889e845b (diff) | |
download | cpython-ba4105c1335503e3d441abbd7a3e74d255ead1a5.zip cpython-ba4105c1335503e3d441abbd7a3e74d255ead1a5.tar.gz cpython-ba4105c1335503e3d441abbd7a3e74d255ead1a5.tar.bz2 |
#3247: Get rid of Py_FindMethod:
Second step: keep tp_getattr functions when they are complex,
but use PyObject_GenericGetAttr() as a fallback.
These were the last occurrences of Py_FindMethod.
Diffstat (limited to 'Modules/pyexpat.c')
-rw-r--r-- | Modules/pyexpat.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index 92fc753..e85f392 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -1135,6 +1135,8 @@ xmlparse_UseForeignDTD(xmlparseobject *self, PyObject *args) } #endif +static PyObject *xmlparse_dir(PyObject *self, PyObject* noargs); + static struct PyMethodDef xmlparse_methods[] = { {"Parse", (PyCFunction)xmlparse_Parse, METH_VARARGS, xmlparse_Parse__doc__}, @@ -1154,6 +1156,7 @@ static struct PyMethodDef xmlparse_methods[] = { {"UseForeignDTD", (PyCFunction)xmlparse_UseForeignDTD, METH_VARARGS, xmlparse_UseForeignDTD__doc__}, #endif + {"__dir__", xmlparse_dir, METH_NOARGS}, {NULL, NULL} /* sentinel */ }; @@ -1329,9 +1332,15 @@ get_pybool(int istrue) } static PyObject * -xmlparse_getattr(xmlparseobject *self, char *name) +xmlparse_getattro(xmlparseobject *self, PyObject *nameobj) { - int handlernum = handlername2int(name); + char *name = ""; + int handlernum = -1; + + if (PyUnicode_Check(nameobj)) + name = PyUnicode_AsString(nameobj); + + handlernum = handlername2int(name); if (handlernum != -1) { PyObject *result = self->handlers[handlernum]; @@ -1390,7 +1399,7 @@ xmlparse_getattr(xmlparseobject *self, char *name) } } - return Py_FindMethod(xmlparse_methods, (PyObject *)self, name); + return PyObject_GenericGetAttr((PyObject*)self, nameobj); } static PyObject * @@ -1603,11 +1612,6 @@ xmlparse_clear(xmlparseobject *op) PyDoc_STRVAR(Xmlparsetype__doc__, "XML parser"); -static PyMethodDef xmlparse_tp_methods[] = { - {"__dir__", xmlparse_dir, METH_NOARGS}, - {NULL, NULL} /* sentinel */ -}; - static PyTypeObject Xmlparsetype = { PyVarObject_HEAD_INIT(NULL, 0) "pyexpat.xmlparser", /*tp_name*/ @@ -1616,7 +1620,7 @@ static PyTypeObject Xmlparsetype = { /* methods */ (destructor)xmlparse_dealloc, /*tp_dealloc*/ (printfunc)0, /*tp_print*/ - (getattrfunc)xmlparse_getattr, /*tp_getattr*/ + 0, /*tp_getattr*/ (setattrfunc)xmlparse_setattr, /*tp_setattr*/ (cmpfunc)0, /*tp_compare*/ (reprfunc)0, /*tp_repr*/ @@ -1626,7 +1630,7 @@ static PyTypeObject Xmlparsetype = { (hashfunc)0, /*tp_hash*/ (ternaryfunc)0, /*tp_call*/ (reprfunc)0, /*tp_str*/ - 0, /* tp_getattro */ + (getattrofunc)xmlparse_getattro, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ #ifdef Py_TPFLAGS_HAVE_GC @@ -1641,7 +1645,7 @@ static PyTypeObject Xmlparsetype = { 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ - xmlparse_tp_methods /* tp_methods */ + xmlparse_methods, /* tp_methods */ }; /* End of code for xmlparser objects */ @@ -1794,7 +1798,8 @@ MODULE_INITFUNC(void) if (modelmod_name == NULL) return NULL; - Py_TYPE(&Xmlparsetype) = &PyType_Type; + if (PyType_Ready(&Xmlparsetype) < 0) + return NULL; /* Create the module and add the functions */ m = PyModule_Create(&pyexpatmodule); |