#define get_array_state_by_class(cls) \
(get_array_state(PyType_GetModule(cls)))
+#define arrayobject_CAST(op) ((arrayobject *)(op))
+#define arrayiterobject_CAST(op) ((arrayiterobject *)(op))
+
enum machine_format_code {
UNKNOWN_FORMAT = -1,
/* UNKNOWN_FORMAT is used to indicate that the machine format for an
/* Methods */
static int
-array_tp_traverse(arrayobject *op, visitproc visit, void *arg)
+array_tp_traverse(PyObject *op, visitproc visit, void *arg)
{
Py_VISIT(Py_TYPE(op));
return 0;
}
static void
-array_dealloc(arrayobject *op)
+array_dealloc(PyObject *op)
{
PyTypeObject *tp = Py_TYPE(op);
PyObject_GC_UnTrack(op);
- if (op->weakreflist != NULL)
- PyObject_ClearWeakRefs((PyObject *) op);
- if (op->ob_item != NULL)
- PyMem_Free(op->ob_item);
+ arrayobject *self = arrayobject_CAST(op);
+ if (self->weakreflist != NULL) {
+ PyObject_ClearWeakRefs(op);
+ }
+ if (self->ob_item != NULL) {
+ PyMem_Free(self->ob_item);
+ }
tp->tp_free(op);
Py_DECREF(tp);
}
}
static Py_ssize_t
-array_length(arrayobject *a)
+array_length(PyObject *op)
{
- return Py_SIZE(a);
+ return Py_SIZE(op);
}
static PyObject *
-array_item(arrayobject *a, Py_ssize_t i)
+array_item(PyObject *op, Py_ssize_t i)
{
- if (i < 0 || i >= Py_SIZE(a)) {
+ if (i < 0 || i >= Py_SIZE(op)) {
PyErr_SetString(PyExc_IndexError, "array index out of range");
return NULL;
}
- return getarrayitem((PyObject *)a, i);
+ return getarrayitem(op, i);
}
static PyObject *
}
static PyObject *
-array_concat(arrayobject *a, PyObject *bb)
+array_concat(PyObject *op, PyObject *bb)
{
+ arrayobject *a = arrayobject_CAST(op);
array_state *state = find_array_state_by_type(Py_TYPE(a));
Py_ssize_t size;
arrayobject *np;
}
static PyObject *
-array_repeat(arrayobject *a, Py_ssize_t n)
+array_repeat(PyObject *op, Py_ssize_t n)
{
+ arrayobject *a = arrayobject_CAST(op);
array_state *state = find_array_state_by_type(Py_TYPE(a));
if (n < 0)
}
static int
-array_ass_item(arrayobject *a, Py_ssize_t i, PyObject *v)
+array_ass_item(PyObject *op, Py_ssize_t i, PyObject *v)
{
+ arrayobject *a = arrayobject_CAST(op);
if (i < 0 || i >= Py_SIZE(a)) {
PyErr_SetString(PyExc_IndexError,
"array assignment index out of range");
array_state *state = find_array_state_by_type(Py_TYPE(a));
assert(array_Check(a, state));
#endif
- return array_ass_item((arrayobject *)a, i, v);
+ return array_ass_item(a, i, v);
}
static int
}
static PyObject *
-array_inplace_concat(arrayobject *self, PyObject *bb)
+array_inplace_concat(PyObject *op, PyObject *bb)
{
+ arrayobject *self = arrayobject_CAST(op);
array_state *state = find_array_state_by_type(Py_TYPE(self));
if (!array_Check(bb, state)) {
}
static PyObject *
-array_inplace_repeat(arrayobject *self, Py_ssize_t n)
+array_inplace_repeat(PyObject *op, Py_ssize_t n)
{
+ arrayobject *self = arrayobject_CAST(op);
const Py_ssize_t array_size = Py_SIZE(self);
if (array_size > 0 && n != 1 ) {
}
static int
-array_contains(arrayobject *self, PyObject *v)
+array_contains(PyObject *self, PyObject *v)
{
Py_ssize_t i;
int cmp;
for (i = 0, cmp = 0 ; cmp == 0 && i < Py_SIZE(self); i++) {
- PyObject *selfi = getarrayitem((PyObject *)self, i);
+ PyObject *selfi = getarrayitem(self, i);
if (selfi == NULL)
return -1;
cmp = PyObject_RichCompareBool(selfi, v, Py_EQ);
}
static PyObject *
-array_get_typecode(arrayobject *a, void *closure)
+array_get_typecode(PyObject *op, void *Py_UNUSED(closure))
{
+ arrayobject *a = arrayobject_CAST(op);
char typecode = a->ob_descr->typecode;
return PyUnicode_FromOrdinal(typecode);
}
static PyObject *
-array_get_itemsize(arrayobject *a, void *closure)
+array_get_itemsize(PyObject *op, void *Py_UNUSED(closure))
{
+ arrayobject *a = arrayobject_CAST(op);
return PyLong_FromLong((long)a->ob_descr->itemsize);
}
static PyGetSetDef array_getsets [] = {
- {"typecode", (getter) array_get_typecode, NULL,
+ {"typecode", array_get_typecode, NULL,
"the typecode character used to create the array"},
- {"itemsize", (getter) array_get_itemsize, NULL,
+ {"itemsize", array_get_itemsize, NULL,
"the size, in bytes, of one array item"},
{NULL}
};
};
static PyObject *
-array_repr(arrayobject *a)
+array_repr(PyObject *op)
{
char typecode;
PyObject *s, *v = NULL;
Py_ssize_t len;
+ arrayobject *a = arrayobject_CAST(op);
len = Py_SIZE(a);
typecode = a->ob_descr->typecode;
}
static PyObject*
-array_subscr(arrayobject* self, PyObject* item)
+array_subscr(PyObject *op, PyObject *item)
{
+ arrayobject *self = arrayobject_CAST(op);
array_state *state = find_array_state_by_type(Py_TYPE(self));
if (PyIndex_Check(item)) {
}
if (i < 0)
i += Py_SIZE(self);
- return array_item(self, i);
+ return array_item(op, i);
}
else if (PySlice_Check(item)) {
Py_ssize_t start, stop, step, slicelength, i;
}
static int
-array_ass_subscr(arrayobject* self, PyObject* item, PyObject* value)
+array_ass_subscr(PyObject *op, PyObject *item, PyObject *value)
{
Py_ssize_t start, stop, step, slicelength, needed;
+ arrayobject *self = arrayobject_CAST(op);
array_state* state = find_array_state_by_type(Py_TYPE(self));
arrayobject* other;
int itemsize;
value = array_slice(other, 0, needed);
if (value == NULL)
return -1;
- ret = array_ass_subscr(self, item, value);
+ ret = array_ass_subscr(op, item, value);
Py_DECREF(value);
return ret;
}
static int
-array_buffer_getbuf(arrayobject *self, Py_buffer *view, int flags)
+array_buffer_getbuf(PyObject *op, Py_buffer *view, int flags)
{
if (view == NULL) {
PyErr_SetString(PyExc_BufferError,
return -1;
}
+ arrayobject *self = arrayobject_CAST(op);
view->buf = (void *)self->ob_item;
view->obj = Py_NewRef(self);
if (view->buf == NULL)
}
static void
-array_buffer_relbuf(arrayobject *self, Py_buffer *view)
+array_buffer_relbuf(PyObject *op, Py_buffer *Py_UNUSED(view))
{
+ arrayobject *self = arrayobject_CAST(op);
self->ob_exports--;
}
itemsize -- the length in bytes of one array item\n\
");
-static PyObject *array_iter(arrayobject *ao);
+static PyObject *array_iter(PyObject *op);
static struct PyMemberDef array_members[] = {
{"__weaklistoffset__", Py_T_PYSSIZET, offsetof(arrayobject, weakreflist), Py_READONLY},
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=fb46d5ef98dd95ff]*/
static PyObject *
-array_iter(arrayobject *ao)
+array_iter(PyObject *op)
{
+ arrayobject *ao = arrayobject_CAST(op);
array_state *state = find_array_state_by_type(Py_TYPE(ao));
arrayiterobject *it;
}
static PyObject *
-arrayiter_next(arrayiterobject *it)
+arrayiter_next(PyObject *op)
{
- arrayobject *ao;
-
+ arrayiterobject *it = arrayiterobject_CAST(op);
assert(it != NULL);
#ifndef NDEBUG
array_state *state = find_array_state_by_type(Py_TYPE(it));
assert(PyObject_TypeCheck(it, state->ArrayIterType));
#endif
- ao = it->ao;
+ arrayobject *ao = it->ao;
if (ao == NULL) {
return NULL;
}
}
static void
-arrayiter_dealloc(arrayiterobject *it)
+arrayiter_dealloc(PyObject *op)
{
+ arrayiterobject *it = arrayiterobject_CAST(op);
PyTypeObject *tp = Py_TYPE(it);
-
PyObject_GC_UnTrack(it);
Py_XDECREF(it->ao);
PyObject_GC_Del(it);
}
static int
-arrayiter_traverse(arrayiterobject *it, visitproc visit, void *arg)
+arrayiter_traverse(PyObject *op, visitproc visit, void *arg)
{
+ arrayiterobject *it = arrayiterobject_CAST(op);
Py_VISIT(Py_TYPE(it));
Py_VISIT(it->ao);
return 0;
static void
array_free(void *module)
{
- array_clear((PyObject *)module);
+ (void)array_clear((PyObject *)module);
}
/* No functions in array module. */