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