1616 static PyObject *
1617 bitarray_delitem(bitarrayobject *self, PyObject *a)
1618 {
1619 idx_t start, stop, step, slicelength, j, i = 0;
1620
1621 if (ISINDEX(a)) {
when considering value == (long unsigned int)0 from bitarray/_bitarray.c:1621
taking False path
when treating unknown struct PyNumberMethods * from bitarray/_bitarray.c:1621 as non-NULL
taking True path
when considering range: 1 <= value <= 131072
taking True path
when treating unknown struct PyNumberMethods * from bitarray/_bitarray.c:1621 as non-NULL
when treating unknown struct PyObject * (*unaryfunc) (struct PyObject *) from bitarray/_bitarray.c:1621 as non-NULL
taking True path
1622 getIndex(a, &i);
1623
1624 if (i < 0)
when taking True path
1625 i += self->nbits;
1626
1627 if (i < 0 || i >= self->nbits) {
when considering range: 0 <= value <= 0x7fffffffffffffff
taking False path
when taking False path
1628 PyErr_SetString(PyExc_IndexError,
1629 "bitarray assignment index out of range");
1630 return NULL;
1631 }
1632 if (delete_n(self, i, 1) < 0)
when considering range: -0x80000000 <= value <= -1
taking True path
1633 return NULL;
1634 Py_RETURN_NONE;
1635 }
1636 if (PySlice_Check(a)) {
1637 if (slice_GetIndicesEx((PySliceObject *) a, self->nbits,
1638 &start, &stop, &step, &slicelength) < 0) {
1639 return NULL;
1640 }
1641 if (slicelength == 0)
1642 Py_RETURN_NONE;
1643
1644 if (step < 0) {
1645 stop = start + 1;
1646 start = stop + step * (slicelength - 1) - 1;
1647 step = -step;
1648 }
1649 if (step == 1) {
1650 assert (stop - start == slicelength);
1651 if (delete_n(self, start, slicelength) < 0)
1652 return NULL;
1653 Py_RETURN_NONE;
1654 }
1655 /* This is the only complicated part when step > 1 */
1656 for (i = j = start; i < self->nbits; i++)
1657 if ((i - start) % step != 0 || i >= stop) {
1658 setbit(self, j, GETBIT(self, i));
1659 j++;
1660 }
1661 if (resize(self, self->nbits - slicelength) < 0)
1662 return NULL;
1663 Py_RETURN_NONE;
1664 }
1665 PyErr_SetString(PyExc_TypeError, "index or slice expected");
1666 return NULL;
1667 }
returning (PyObject*)NULL without setting an exception
found 3 similar trace(s) to this