cpython: a29ae1c2b8b2 (original) (raw)

--- a/Doc/library/xml.etree.elementtree.rst +++ b/Doc/library/xml.etree.elementtree.rst @@ -646,8 +646,8 @@ ElementTree Objects Loads an external XML section into this element tree. source is a file name or :term:file object. parser is an optional parser instance.

.. method:: write(file, encoding="us-ascii", xml_declaration=None, method="xml") @@ -767,9 +767,9 @@ XMLParser Objects :class:Element structure builder for XML source data, based on the expat parser. html are predefined HTML entities. This flag is not supported by the current implementation. target is the target object. If omitted, the

.. method:: close()

--- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -2028,6 +2028,34 @@ class TreeBuilderTest(unittest.TestCase) 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'))[](#l2.4) +class XMLParserTest(unittest.TestCase):

+

+

+

+

+ + class NoAcceleratorTest(unittest.TestCase): # Test that the C accelerator was not imported for pyET def test_correct_import_pyET(self): @@ -2245,6 +2273,7 @@ def test_main(module=pyET): ElementTreeTest, NamespaceParseTest, TreeBuilderTest,

--- a/Modules/_elementtree.c +++ b/Modules/elementtree.c @@ -2257,6 +2257,9 @@ static struct PyExpat_CAPI* expat_capi; #define EXPAT(func) (XML##func) #endif +static XML_Memory_Handling_Suite ExpatMemoryHandler = {

+ typedef struct { PyObject_HEAD @@ -2671,121 +2674,125 @@ expat_unknown_encoding_handler(XMLParser } /* -------------------------------------------------------------------- / -/ constructor and destructor / - -static PyObject -xmlparser(PyObject* self_, PyObject* args, PyObject* kw) + +static PyObject * +xmlparser_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {

-

- -#if defined(USE_PYEXPAT_CAPI)

-

+} + +static int +xmlparser_init(PyObject *self, PyObject *args, PyObject *kwds) +{

+

+

-

-

+

PyErr_Clear(); -

-

} -static void -xmlparser_dealloc(XMLParserObject* self) +static int +xmlparser_gc_traverse(XMLParserObject *self, visitproc visit, void *arg) +{

+

+

+} + +static int +xmlparser_gc_clear(XMLParserObject self) { EXPAT(ParserFree)(self->parser); @@ -2796,17 +2803,20 @@ xmlparser_dealloc(XMLParserObject self) Py_XDECREF(self->handle_data); Py_XDECREF(self->handle_start);

-

-

+

} -/* -------------------------------------------------------------------- / -/ methods (in alphabetical order) / +static void +xmlparser_dealloc(XMLParserObject self) +{

+} LOCAL(PyObject*) expat_parse(XMLParserObject* self, char* data, int data_len, int final) @@ -3083,31 +3093,42 @@ static PyTypeObject XMLParser_Type = { PyVarObject_HEAD_INIT(NULL, 0) "XMLParser", sizeof(XMLParserObject), 0, /* methods */

}; #endif @@ -3117,9 +3138,6 @@ static PyTypeObject XMLParser_Type = { static PyMethodDef _functions[] = { {"SubElement", (PyCFunction) subelement, METH_VARARGS|METH_KEYWORDS}, -#if defined(USE_EXPAT)

-#endif {NULL, NULL} }; @@ -3214,8 +3232,15 @@ PyInit__elementtree(void) expat_capi->size < sizeof(struct PyExpat_CAPI) || expat_capi->MAJOR_VERSION != XML_MAJOR_VERSION || expat_capi->MINOR_VERSION != XML_MINOR_VERSION ||

#endif @@ -3231,5 +3256,10 @@ PyInit__elementtree(void) Py_INCREF((PyObject *)&TreeBuilder_Type); PyModule_AddObject(m, "TreeBuilder", (PyObject *)&TreeBuilder_Type); +#if defined(USE_EXPAT)

+#endif + return m; }