PyObject *elementtree_module;
} XMLParserObject;
-
-#define _XMLParser_CAST(op) ((XMLParserObject *)(op))
+#define XMLParserObject_CAST(op) ((XMLParserObject *)(op))
/* helpers */
/* handlers */
static void
-expat_default_handler(XMLParserObject* self, const XML_Char* data_in,
- int data_len)
+expat_default_handler(void *op, const XML_Char *data_in, int data_len)
{
- PyObject* key;
- PyObject* value;
- PyObject* res;
+ XMLParserObject *self = XMLParserObject_CAST(op);
+ PyObject *key;
+ PyObject *value;
+ PyObject *res;
if (data_len < 2 || data_in[0] != '&')
return;
}
static void
-expat_start_handler(XMLParserObject* self, const XML_Char* tag_in,
+expat_start_handler(void *op, const XML_Char *tag_in,
const XML_Char **attrib_in)
{
- PyObject* res;
- PyObject* tag;
- PyObject* attrib;
+ XMLParserObject *self = XMLParserObject_CAST(op);
+ PyObject *res;
+ PyObject *tag;
+ PyObject *attrib;
int ok;
if (PyErr_Occurred())
return;
}
while (attrib_in[0] && attrib_in[1]) {
- PyObject* key = makeuniversal(self, attrib_in[0]);
+ PyObject *key = makeuniversal(self, attrib_in[0]);
if (key == NULL) {
Py_DECREF(attrib);
Py_DECREF(tag);
return;
}
- PyObject* value = PyUnicode_DecodeUTF8(attrib_in[1], strlen(attrib_in[1]), "strict");
+ PyObject *value = PyUnicode_DecodeUTF8(attrib_in[1], strlen(attrib_in[1]), "strict");
if (value == NULL) {
Py_DECREF(key);
Py_DECREF(attrib);
}
static void
-expat_data_handler(XMLParserObject* self, const XML_Char* data_in,
+expat_data_handler(void *op, const XML_Char *data_in,
int data_len)
{
- PyObject* data;
- PyObject* res;
+ XMLParserObject *self = XMLParserObject_CAST(op);
+ PyObject *data;
+ PyObject *res;
if (PyErr_Occurred())
return;
}
static void
-expat_end_handler(XMLParserObject* self, const XML_Char* tag_in)
+expat_end_handler(void *op, const XML_Char *tag_in)
{
- PyObject* tag;
- PyObject* res = NULL;
+ XMLParserObject *self = XMLParserObject_CAST(op);
+ PyObject *tag;
+ PyObject *res = NULL;
if (PyErr_Occurred())
return;
}
static void
-expat_start_ns_handler(XMLParserObject* self, const XML_Char* prefix_in,
+expat_start_ns_handler(void *op, const XML_Char *prefix_in,
const XML_Char *uri_in)
{
- PyObject* res = NULL;
- PyObject* uri;
- PyObject* prefix;
+ XMLParserObject *self = XMLParserObject_CAST(op);
+ PyObject *res = NULL;
+ PyObject *uri;
+ PyObject *prefix;
if (PyErr_Occurred())
return;
return;
}
- PyObject* args[2] = {prefix, uri};
+ PyObject *args[2] = {prefix, uri};
res = PyObject_Vectorcall(self->handle_start_ns, args, 2, NULL);
Py_DECREF(uri);
Py_DECREF(prefix);
}
static void
-expat_end_ns_handler(XMLParserObject* self, const XML_Char* prefix_in)
+expat_end_ns_handler(void *op, const XML_Char *prefix_in)
{
+ XMLParserObject *self = XMLParserObject_CAST(op);
PyObject *res = NULL;
- PyObject* prefix;
+ PyObject *prefix;
if (PyErr_Occurred())
return;
}
static void
-expat_comment_handler(XMLParserObject* self, const XML_Char* comment_in)
+expat_comment_handler(void *op, const XML_Char *comment_in)
{
- PyObject* comment;
- PyObject* res;
+ XMLParserObject *self = XMLParserObject_CAST(op);
+ PyObject *comment;
+ PyObject *res;
if (PyErr_Occurred())
return;
}
static void
-expat_start_doctype_handler(XMLParserObject *self,
+expat_start_doctype_handler(void *op,
const XML_Char *doctype_name,
const XML_Char *sysid,
const XML_Char *pubid,
int has_internal_subset)
{
+ XMLParserObject *self = XMLParserObject_CAST(op);
PyObject *doctype_name_obj, *sysid_obj, *pubid_obj;
PyObject *res;
}
static void
-expat_pi_handler(XMLParserObject* self, const XML_Char* target_in,
- const XML_Char* data_in)
+expat_pi_handler(void *op, const XML_Char *target_in,
+ const XML_Char *data_in)
{
- PyObject* pi_target;
- PyObject* data;
- PyObject* res;
+ XMLParserObject *self = XMLParserObject_CAST(op);
+ PyObject *pi_target;
+ PyObject *data;
+ PyObject *res;
if (PyErr_Occurred())
return;
if (!data)
goto error;
- PyObject* args[2] = {pi_target, data};
+ PyObject *args[2] = {pi_target, data};
res = PyObject_Vectorcall(self->handle_pi, args, 2, NULL);
Py_XDECREF(res);
Py_DECREF(data);
static int
xmlparser_gc_traverse(PyObject *op, visitproc visit, void *arg)
{
- XMLParserObject *self = _XMLParser_CAST(op);
+ XMLParserObject *self = XMLParserObject_CAST(op);
Py_VISIT(Py_TYPE(self));
Py_VISIT(self->handle_close);
Py_VISIT(self->handle_pi);
static int
xmlparser_gc_clear(PyObject *op)
{
- XMLParserObject *self = _XMLParser_CAST(op);
+ XMLParserObject *self = XMLParserObject_CAST(op);
elementtreestate *st = self->state;
if (self->parser != NULL) {
XML_Parser parser = self->parser;