From 798dc6c3d2b2dc082454919f659c7d0675ced2b0 Mon Sep 17 00:00:00 2001 From: Oren Milman Date: Tue, 12 Sep 2017 15:06:33 +0300 Subject: [PATCH 1/3] init commit --- Modules/_elementtree.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 857005a2a9b8ad..0bcdde3670246c 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -750,6 +750,13 @@ _elementtree_Element___deepcopy__(ElementObject *self, PyObject *memo) PyObject* tail; PyObject* id; + if (!PyDict_Check(memo)) { + PyErr_Format(PyExc_TypeError, + "memo argument must be a dictionary, not '%.200s'", + Py_TYPE(memo)->tp_name); + return NULL; + } + tag = deepcopy(self->tag, memo); if (!tag) return NULL; From de9bd6eca994ec9646412166577f6471640381e4 Mon Sep 17 00:00:00 2001 From: Oren Milman Date: Tue, 12 Sep 2017 16:12:11 +0300 Subject: [PATCH 2/3] simplify the patch by using argument clinic --- Modules/_elementtree.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 0bcdde3670246c..98d5e7f50626c8 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -733,14 +733,14 @@ LOCAL(PyObject *) deepcopy(PyObject *, PyObject *); /*[clinic input] _elementtree.Element.__deepcopy__ - memo: object + memo: object(subclass_of="&PyDict_Type") / [clinic start generated code]*/ static PyObject * -_elementtree_Element___deepcopy__(ElementObject *self, PyObject *memo) -/*[clinic end generated code: output=d1f19851d17bf239 input=df24c2b602430b77]*/ +_elementtree_Element___deepcopy___impl(ElementObject *self, PyObject *memo) +/*[clinic end generated code: output=eefc3df50465b642 input=a2d40348c0aade10]*/ { Py_ssize_t i; ElementObject* element; @@ -750,13 +750,6 @@ _elementtree_Element___deepcopy__(ElementObject *self, PyObject *memo) PyObject* tail; PyObject* id; - if (!PyDict_Check(memo)) { - PyErr_Format(PyExc_TypeError, - "memo argument must be a dictionary, not '%.200s'", - Py_TYPE(memo)->tp_name); - return NULL; - } - tag = deepcopy(self->tag, memo); if (!tag) return NULL; @@ -856,7 +849,8 @@ deepcopy(PyObject *object, PyObject *memo) /* Fall through to general case */ } else if (Element_CheckExact(object)) { - return _elementtree_Element___deepcopy__((ElementObject *)object, memo); + return _elementtree_Element___deepcopy___impl( + (ElementObject *)object, memo); } } From c7e0b13a8ccf59f3329599f6ca56de4ab1df01ad Mon Sep 17 00:00:00 2001 From: Oren Milman Date: Tue, 12 Sep 2017 16:15:22 +0300 Subject: [PATCH 3/3] simplify the patch by using argument clinic. now with clinic .c.h file --- Modules/clinic/_elementtree.c.h | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Modules/clinic/_elementtree.c.h b/Modules/clinic/_elementtree.c.h index 19a77978f36ebf..9563afa88d0b27 100644 --- a/Modules/clinic/_elementtree.c.h +++ b/Modules/clinic/_elementtree.c.h @@ -70,6 +70,24 @@ PyDoc_STRVAR(_elementtree_Element___deepcopy____doc__, #define _ELEMENTTREE_ELEMENT___DEEPCOPY___METHODDEF \ {"__deepcopy__", (PyCFunction)_elementtree_Element___deepcopy__, METH_O, _elementtree_Element___deepcopy____doc__}, +static PyObject * +_elementtree_Element___deepcopy___impl(ElementObject *self, PyObject *memo); + +static PyObject * +_elementtree_Element___deepcopy__(ElementObject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + PyObject *memo; + + if (!PyArg_Parse(arg, "O!:__deepcopy__", &PyDict_Type, &memo)) { + goto exit; + } + return_value = _elementtree_Element___deepcopy___impl(self, memo); + +exit: + return return_value; +} + PyDoc_STRVAR(_elementtree_Element___sizeof____doc__, "__sizeof__($self, /)\n" "--\n" @@ -731,4 +749,4 @@ _elementtree_XMLParser__setevents(XMLParserObject *self, PyObject **args, Py_ssi exit: return return_value; } -/*[clinic end generated code: output=75d0ff80e20b830f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ed55bd5209c12364 input=a9049054013a1b77]*/