summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2018-10-04 07:41:27 (GMT)
committerGitHub <noreply@github.com>2018-10-04 07:41:27 (GMT)
commitb2953fa3dda5898fcb0029792d9229f150e6e2cb (patch)
tree15e69de1c03d877f0d67a33a552bbedcdb765cf4
parent65ed12cb7caba6ef4eb0ba18cbede5eab4e1c7a5 (diff)
downloadcpython-b2953fa3dda5898fcb0029792d9229f150e6e2cb.zip
cpython-b2953fa3dda5898fcb0029792d9229f150e6e2cb.tar.gz
cpython-b2953fa3dda5898fcb0029792d9229f150e6e2cb.tar.bz2
bpo-34739: Get rid of tp_getattro in xml.etree.ElementTree.XMLParser. (GH-9420)
Use tp_members and tp_getset instead.
-rw-r--r--Modules/_elementtree.c43
1 files changed, 19 insertions, 24 deletions
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index bba6873..bd7702e 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -3685,30 +3685,25 @@ _elementtree_XMLParser__setevents_impl(XMLParserObject *self,
Py_RETURN_NONE;
}
-static PyObject*
-xmlparser_getattro(XMLParserObject* self, PyObject* nameobj)
-{
- if (PyUnicode_Check(nameobj)) {
- PyObject* res;
- if (_PyUnicode_EqualToASCIIString(nameobj, "entity"))
- res = self->entity;
- else if (_PyUnicode_EqualToASCIIString(nameobj, "target"))
- res = self->target;
- else if (_PyUnicode_EqualToASCIIString(nameobj, "version")) {
- return PyUnicode_FromFormat(
- "Expat %d.%d.%d", XML_MAJOR_VERSION,
- XML_MINOR_VERSION, XML_MICRO_VERSION);
- }
- else
- goto generic;
+static PyMemberDef xmlparser_members[] = {
+ {"entity", T_OBJECT, offsetof(XMLParserObject, entity), READONLY, NULL},
+ {"target", T_OBJECT, offsetof(XMLParserObject, target), READONLY, NULL},
+ {NULL}
+};
- Py_INCREF(res);
- return res;
- }
- generic:
- return PyObject_GenericGetAttr((PyObject*) self, nameobj);
+static PyObject*
+xmlparser_version_getter(XMLParserObject *self, void *closure)
+{
+ return PyUnicode_FromFormat(
+ "Expat %d.%d.%d", XML_MAJOR_VERSION,
+ XML_MINOR_VERSION, XML_MICRO_VERSION);
}
+static PyGetSetDef xmlparser_getsetlist[] = {
+ {"version", (getter)xmlparser_version_getter, NULL, NULL},
+ {NULL},
+};
+
#include "clinic/_elementtree.c.h"
static PyMethodDef element_methods[] = {
@@ -3890,7 +3885,7 @@ static PyTypeObject XMLParser_Type = {
0, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
- (getattrofunc)xmlparser_getattro, /* tp_getattro */
+ 0, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
@@ -3903,8 +3898,8 @@ static PyTypeObject XMLParser_Type = {
0, /* tp_iter */
0, /* tp_iternext */
xmlparser_methods, /* tp_methods */
- 0, /* tp_members */
- 0, /* tp_getset */
+ xmlparser_members, /* tp_members */
+ xmlparser_getsetlist, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */