File: bitarray/_bitarray.c
Function: bitarray_new
Error: returning (PyObject*)NULL without setting an exception
1976 static PyObject *
1977 bitarray_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
1978 {
1979     PyObject *a;  /* to be returned in some cases */
1980     PyObject *initial = NULL;
1981     idx_t nbits = 0;
1982     char *endianStr = "<NOT_PROVIDED>";
1983     int endian = DEFAULT_ENDIAN;
1984     static char* kwlist[] = {"initial", "endian", NULL};
1985 
1986     if (!PyArg_ParseTupleAndKeywords(args, kwds,
when _PyArg_ParseTupleAndKeywords_SizeT() succeeds
taking False path
1987                                      "|Os:bitarray", kwlist,
1988                                      &initial, &endianStr)) {
1989         return NULL;
1990     }
1991     if (strcmp(endianStr, "little") == 0) {
taking False path
when considering range: -0x80000000 <= value <= -1
taking False path
1992         endian = 0;
1993     }
1994     else if (strcmp(endianStr, "big") == 0) {
taking True path
when treating unknown const char * from bitarray/_bitarray.c:1986 as non-NULL
when considering range: -255 <= value <= -1
taking False path
taking False path
1995         endian = 1;
1996     }
1997     else if (strcmp(endianStr, "<NOT_PROVIDED>") == 0) {
taking False path
when considering value == (int)0 from bitarray/_bitarray.c:1997
taking True path
1998         /* do nothing, keep the default value */
1999     }
2000     else {
2001         PyErr_SetString(PyExc_ValueError,
2002                         "endian must be 'little' or 'big'");
2003         return NULL;
2004     }
2005     /* no arg or None */
2006     if (initial == NULL || initial == Py_None)
taking False path
taking False path
2007         return newbitarrayobject(type, 0, endian);
2008 
2009     /* int, long */
2010     if (ISINDEX(initial)) {
when considering value == (long unsigned int)0 from bitarray/_bitarray.c:2010
taking False path
when treating unknown struct _typeobject * from bitarray/_bitarray.c:2010 as non-NULL
when treating unknown struct PyNumberMethods * from bitarray/_bitarray.c:2010 as non-NULL
taking True path
when treating unknown struct _typeobject * from bitarray/_bitarray.c:2010 as non-NULL
when considering value == (long int)0 from bitarray/_bitarray.c:2010
taking False path
2011         getIndex(initial, &nbits);
2012 
2013         if (nbits < 0) {
2014             PyErr_SetString(PyExc_ValueError,
2015                             "cannot create bitarray with negative length");
2016             return NULL;
2017         }
2018         return newbitarrayobject(type, nbits, endian);
2019     }
2020 
2021     /* from bitarray itself */
2022     if (bitarray_Check(initial)) {
when taking False path
when considering value == (int)0 from bitarray/_bitarray.c:2022
taking False path
2023 #define np  ((bitarrayobject *) initial)
2024         a = newbitarrayobject(type, np->nbits,
2025                               (strcmp(endianStr, "<NOT_PROVIDED>") == 0  ?
2026                                np->endian : endian));
2027         if (a == NULL)
2028             return NULL;
2029         memcpy(((bitarrayobject *) a)->ob_item, np->ob_item, Py_SIZE(np));
2030 #undef np
2031         return a;
2032     }
2033 
2034     /* leave remaining type dispatch to the extend method */
2035     a = newbitarrayobject(type, 0, endian);
when newbitarrayobject() succeeds
2036     if (a == NULL)
taking False path
2037         return NULL;
2038 
2039     if (extend_dispatch((bitarrayobject *) a, initial) < 0) {
when considering range: -0x80000000 <= value <= -1
taking True path
2040         Py_DECREF(a);
when taking True path
2041         return NULL;
2042     }
2043     return a;
2044 }
returning (PyObject*)NULL without setting an exception