static void validator_dealloc(ValidatorObject *self) { Py_DECREF(self->elements); if (self->context) { Context_Del(self->context); } if (self->free_context) { Context_Del(self->free_context); } PyObject_Del(self); }
Context_Del(Context *self) { /* This will only be set when an error has occurred, so it must be freed. */ /* Note: If the node is container and has any children, they are freed in the process */ if (self->node) { if (!Container_GET_FROZEN(self->node)) { /* If the container was not frozen, it means that we're deleting the context before construction was complete. We need to make sure we get the children working set back before freeing it */ self->children = _Container_GetWorkingChildren(self->node, &self->children_allocated); } Py_DECREF(self->node); } /* Free the working children array */ PyMem_Free(self->children); if (self->next) { Context_Del(self->next); } PyMem_Free(self); }
static void Context_Del(Context *self) { if (self->next) { Context_Del(self->next); } PyObject_FREE(self); }
static void ParserState_Del(ParserState *self) { if (self->context) { Context_Del(self->context); } if (self->free_context) { Context_Del(self->free_context); } Py_CLEAR(self->new_namespaces); Py_CLEAR(self->entity_factory); Py_CLEAR(self->element_factory); Py_CLEAR(self->text_factory); Py_CLEAR(self->processing_instruction_factory); Py_CLEAR(self->comment_factory); Py_CLEAR(self->owner_document); if (self->rule_matcher) { RuleMatchObject_Del(self->rule_matcher); } PyMem_Free(self); }