Lines Matching refs:extra
23 /* An element can hold this many children without extra memory
201 ElementObjectExtra* extra;
218 self->extra = PyObject_Malloc(sizeof(ElementObjectExtra));
219 if (!self->extra) {
225 self->extra->attrib = attrib;
227 self->extra->length = 0;
228 self->extra->allocated = STATIC_CHILDREN;
229 self->extra->children = self->extra->_children;
235 dealloc_extra(ElementObjectExtra *extra)
239 if (!extra)
242 Py_XDECREF(extra->attrib);
244 for (i = 0; i < extra->length; i++)
245 Py_DECREF(extra->children[i]);
247 if (extra->children != extra->_children)
248 PyObject_Free(extra->children);
250 PyObject_Free(extra);
258 if (!self->extra)
263 myextra = self->extra;
264 self->extra = NULL;
280 self->extra = NULL;
319 e->extra = NULL;
433 element_resize(ElementObject* self, Py_ssize_t extra)
438 assert(extra >= 0);
439 /* make sure self->children can hold the given number of extra
442 if (!self->extra) {
447 size = self->extra->length + extra; /* never overflows */
449 if (size > self->extra->allocated) {
460 if (self->extra->children != self->extra->_children) {
465 children = PyObject_Realloc(self->extra->children,
474 memcpy(children, self->extra->children,
475 self->extra->length * sizeof(PyObject*));
477 self->extra->children = children;
478 self->extra->allocated = size;
510 self->extra->children[self->extra->length] = element;
512 self->extra->length++;
521 /* note: this function assumes that the extra section exists */
523 PyObject* res = self->extra->attrib;
527 res = self->extra->attrib = PyDict_New();
629 if (self->extra) {
631 Py_VISIT(self->extra->attrib);
633 for (i = 0; i < self->extra->length; ++i)
634 Py_VISIT(self->extra->children[i]);
646 /* After dropping all references from extra, it's no longer valid anyway,
663 /* element_gc_clear clears all references and deallocates extra
724 self->tag, self->extra ? self->extra->attrib : NULL);
734 assert(!element->extra || !element->extra->length);
735 if (self->extra) {
736 if (element_resize(element, self->extra->length) < 0) {
741 for (i = 0; i < self->extra->length; i++) {
742 Py_INCREF(self->extra->children[i]);
743 element->extra->children[i] = self->extra->children[i];
746 assert(!element->extra->length);
747 element->extra->length = self->extra->length;
780 if (self->extra && self->extra->attrib) {
781 attrib = deepcopy(self->extra->attrib, memo);
808 assert(!element->extra || !element->extra->length);
809 if (self->extra) {
810 if (element_resize(element, self->extra->length) < 0)
813 for (i = 0; i < self->extra->length; i++) {
814 PyObject* child = deepcopy(self->extra->children[i], memo);
820 element->extra->length = i;
823 element->extra->children[i] = child;
826 assert(!element->extra->length);
827 element->extra->length = self->extra->length;
907 if (self->extra) {
909 if (self->extra->children != self->extra->_children)
910 result += sizeof(PyObject*) * self->extra->allocated;
941 children = PyList_New(self->extra ? self->extra->length : 0);
945 PyObject *child = self->extra->children[i];
950 if (self->extra && self->extra->attrib) {
951 attrib = self->extra->attrib;
1010 /* (Re-)allocate 'extra'.
1013 oldextra = self->extra;
1014 self->extra = NULL;
1016 assert(!self->extra || !self->extra->length);
1018 self->extra = oldextra;
1021 assert(self->extra);
1022 assert(self->extra->allocated >= nchildren);
1024 assert(self->extra->attrib == NULL);
1025 self->extra->attrib = oldextra->attrib;
1034 self->extra->length = i;
1039 self->extra->children[i] = child;
1042 assert(!self->extra->length);
1043 self->extra->length = nchildren;
1053 Py_XSETREF(self->extra->attrib, attrib);
1228 if (!self->extra)
1231 for (i = 0; i < self->extra->length; i++) {
1232 PyObject* item = self->extra->children[i];
1272 if (!self->extra) {
1277 for (i = 0; i < self->extra->length; i++) {
1278 PyObject *item = self->extra->children[i];
1330 if (!self->extra)
1333 for (i = 0; i < self->extra->length; i++) {
1334 PyObject* item = self->extra->children[i];
1384 if (self->extra && self->extra->attrib) {
1385 PyObject *attrib = self->extra->attrib;
1447 if (!self->extra || index < 0 || index >= self->extra->length) {
1455 Py_INCREF(self->extra->children[index]);
1456 return self->extra->children[index];
1475 if (!self->extra) {
1481 index += self->extra->length;
1485 if (index > self->extra->length)
1486 index = self->extra->length;
1491 for (i = self->extra->length; i > index; i--)
1492 self->extra->children[i] = self->extra->children[i-1];
1495 self->extra->children[index] = subelement;
1497 self->extra->length++;
1511 if (!self->extra || !self->extra->attrib)
1514 return PyDict_Items(self->extra->attrib);
1526 if (!self->extra || !self->extra->attrib)
1529 return PyDict_Keys(self->extra->attrib);
1535 if (!self->extra)
1538 return self->extra->length;
1584 if (!self->extra) {
1593 for (i = 0; i < self->extra->length; i++) {
1594 if (self->extra->children[i] == subelement)
1596 rc = PyObject_RichCompareBool(self->extra->children[i], subelement, Py_EQ);
1603 if (i >= self->extra->length) {
1612 found = self->extra->children[i];
1614 self->extra->length--;
1615 for (; i < self->extra->length; i++)
1616 self->extra->children[i] = self->extra->children[i+1];
1660 if (!self->extra) {
1682 if (!self->extra || index < 0 || index >= self->extra->length) {
1689 old = self->extra->children[index];
1697 self->extra->children[index] = item;
1699 self->extra->length--;
1700 for (i = index; i < self->extra->length; i++)
1701 self->extra->children[i] = self->extra->children[i+1];
1720 if (i < 0 && self->extra)
1721 i += self->extra->length;
1729 if (!self->extra)
1735 slicelen = PySlice_AdjustIndices(self->extra->length, &start, &stop,
1747 PyObject* item = self->extra->children[cur];
1773 if (i < 0 && self->extra)
1774 i += self->extra->length;
1784 if (!self->extra) {
1792 slicelen = PySlice_AdjustIndices(self->extra->length, &start, &stop,
1833 if (cur + step >= (size_t)self->extra->length) {
1834 num_moved = self->extra->length - cur - 1;
1837 PyList_SET_ITEM(recycle, i, self->extra->children[cur]);
1840 self->extra->children + cur - i,
1841 self->extra->children + cur + 1,
1847 if (cur < (size_t)self->extra->length) {
1849 self->extra->children + cur - slicelen,
1850 self->extra->children + cur,
1851 (self->extra->length - cur) * sizeof(PyObject *));
1854 self->extra->length -= slicelen;
1911 PyList_SET_ITEM(recycle, i, self->extra->children[cur]);
1916 for (i = stop; i < self->extra->length; i++)
1917 self->extra->children[i + newlen - slicelen] = self->extra->children[i];
1920 for (i = self->extra->length-1; i >= stop; i--)
1921 self->extra->children[i + newlen - slicelen] = self->extra->children[i];
1929 self->extra->children[cur] = element;
1932 self->extra->length += newlen - slicelen;
1976 if (!self->extra) {
2031 if (!self->extra) {
2036 Py_XSETREF(self->extra->attrib, value);
2166 ElementObjectExtra *extra;
2168 extra = elem->extra;
2169 if (!extra || child_index >= extra->length) {
2171 /* Note that extra condition on it->parent_stack_used here;
2183 assert(Element_Check(extra->children[child_index]));
2184 elem = (ElementObject *)extra->children[child_index];