PyObject *weakreflist; /* List of weak references */
} PyStructObject;
-#define PyStruct_Check(op, state) PyObject_TypeCheck(op, (PyTypeObject *)(state)->PyStructType)
+#define PyStructObject_CAST(op) ((PyStructObject *)(op))
+#define PyStruct_Check(op, state) PyObject_TypeCheck(op, (PyTypeObject *)(state)->PyStructType)
/* Define various structs to figure out the alignments of types */
}
static int
-s_clear(PyStructObject *s)
+s_clear(PyObject *op)
{
+ PyStructObject *s = PyStructObject_CAST(op);
Py_CLEAR(s->s_format);
return 0;
}
static int
-s_traverse(PyStructObject *s, visitproc visit, void *arg)
+s_traverse(PyObject *op, visitproc visit, void *arg)
{
+ PyStructObject *s = PyStructObject_CAST(op);
Py_VISIT(Py_TYPE(s));
Py_VISIT(s->s_format);
return 0;
}
static void
-s_dealloc(PyStructObject *s)
+s_dealloc(PyObject *op)
{
+ PyStructObject *s = PyStructObject_CAST(op);
PyTypeObject *tp = Py_TYPE(s);
PyObject_GC_UnTrack(s);
- if (s->weakreflist != NULL)
- PyObject_ClearWeakRefs((PyObject *)s);
+ if (s->weakreflist != NULL) {
+ PyObject_ClearWeakRefs(op);
+ }
if (s->s_codes != NULL) {
PyMem_Free(s->s_codes);
}
Py_XDECREF(s->s_format);
- freefunc free_func = PyType_GetSlot(Py_TYPE(s), Py_tp_free);
- free_func(s);
+ tp->tp_free(s);
Py_DECREF(tp);
}
Py_ssize_t index;
} unpackiterobject;
+#define unpackiterobject_CAST(op) ((unpackiterobject *)(op))
+
static void
-unpackiter_dealloc(unpackiterobject *self)
+unpackiter_dealloc(PyObject *op)
{
+ unpackiterobject *self = unpackiterobject_CAST(op);
/* bpo-31095: UnTrack is needed before calling any callbacks */
PyTypeObject *tp = Py_TYPE(self);
PyObject_GC_UnTrack(self);
}
static int
-unpackiter_traverse(unpackiterobject *self, visitproc visit, void *arg)
+unpackiter_traverse(PyObject *op, visitproc visit, void *arg)
{
+ unpackiterobject *self = unpackiterobject_CAST(op);
Py_VISIT(Py_TYPE(self));
Py_VISIT(self->so);
Py_VISIT(self->buf.obj);
}
static PyObject *
-unpackiter_len(unpackiterobject *self, PyObject *Py_UNUSED(ignored))
+unpackiter_len(PyObject *op, PyObject *Py_UNUSED(dummy))
{
Py_ssize_t len;
- if (self->so == NULL)
+ unpackiterobject *self = unpackiterobject_CAST(op);
+ if (self->so == NULL) {
len = 0;
- else
+ }
+ else {
len = (self->buf.len - self->index) / self->so->s_size;
+ }
return PyLong_FromSsize_t(len);
}
static PyMethodDef unpackiter_methods[] = {
- {"__length_hint__", (PyCFunction) unpackiter_len, METH_NOARGS, NULL},
+ {"__length_hint__", unpackiter_len, METH_NOARGS, NULL},
{NULL, NULL} /* sentinel */
};
static PyObject *
-unpackiter_iternext(unpackiterobject *self)
+unpackiter_iternext(PyObject *op)
{
+ unpackiterobject *self = unpackiterobject_CAST(op);
_structmodulestate *state = get_struct_state_iterinst(self);
PyObject *result;
- if (self->so == NULL)
+ if (self->so == NULL) {
return NULL;
+ }
if (self->index >= self->buf.len) {
/* Iterator exhausted */
Py_CLEAR(self->so);
}
assert(self->index + self->so->s_size <= self->buf.len);
result = s_unpack_internal(self->so,
- (char*) self->buf.buf + self->index,
+ (char*)self->buf.buf + self->index,
state);
self->index += self->so->s_size;
return result;
_structmodulestate *state = get_struct_state_structinst(self);
/* Validate arguments. */
- soself = (PyStructObject *)self;
+ soself = PyStructObject_CAST(self);
assert(PyStruct_Check(self, state));
assert(soself->s_codes != NULL);
if (nargs != soself->s_len)
_structmodulestate *state = get_struct_state_structinst(self);
/* Validate arguments. +1 is for the first arg as buffer. */
- soself = (PyStructObject *)self;
+ soself = PyStructObject_CAST(self);
assert(PyStruct_Check(self, state));
assert(soself->s_codes != NULL);
if (nargs != (soself->s_len + 2))
}
static PyObject *
-s_get_format(PyStructObject *self, void *unused)
+s_get_format(PyObject *op, void *Py_UNUSED(closure))
{
+ PyStructObject *self = PyStructObject_CAST(op);
return PyUnicode_FromStringAndSize(PyBytes_AS_STRING(self->s_format),
PyBytes_GET_SIZE(self->s_format));
}
static PyObject *
-s_get_size(PyStructObject *self, void *unused)
+s_get_size(PyObject *op, void *Py_UNUSED(closure))
{
+ PyStructObject *self = PyStructObject_CAST(op);
return PyLong_FromSsize_t(self->s_size);
}
"S.__sizeof__() -> size of S in memory, in bytes");
static PyObject *
-s_sizeof(PyStructObject *self, void *unused)
+s_sizeof(PyObject *op, PyObject *Py_UNUSED(dummy))
{
+ PyStructObject *self = PyStructObject_CAST(op);
size_t size = _PyObject_SIZE(Py_TYPE(self)) + sizeof(formatcode);
for (formatcode *code = self->s_codes; code->fmtdef != NULL; code++) {
size += sizeof(formatcode);
}
static PyObject *
-s_repr(PyStructObject *self)
+s_repr(PyObject *op)
{
+ PyStructObject *self = PyStructObject_CAST(op);
PyObject* fmt = PyUnicode_FromStringAndSize(
PyBytes_AS_STRING(self->s_format), PyBytes_GET_SIZE(self->s_format));
if (fmt == NULL) {
{"pack_into", _PyCFunction_CAST(s_pack_into), METH_FASTCALL, s_pack_into__doc__},
STRUCT_UNPACK_METHODDEF
STRUCT_UNPACK_FROM_METHODDEF
- {"__sizeof__", (PyCFunction)s_sizeof, METH_NOARGS, s_sizeof__doc__},
+ {"__sizeof__", s_sizeof, METH_NOARGS, s_sizeof__doc__},
{NULL, NULL} /* sentinel */
};
};
static PyGetSetDef s_getsetlist[] = {
- {"format", (getter)s_get_format, (setter)NULL, PyDoc_STR("struct format string"), NULL},
- {"size", (getter)s_get_size, (setter)NULL, PyDoc_STR("struct size in bytes"), NULL},
+ {"format", s_get_format, NULL, PyDoc_STR("struct format string"), NULL},
+ {"size", s_get_size, NULL, PyDoc_STR("struct size in bytes"), NULL},
{NULL} /* sentinel */
};
return 0;
}
if (s_object != NULL) {
- *ptr = (PyStructObject *)s_object;
+ *ptr = PyStructObject_CAST(s_object);
return Py_CLEANUP_SUPPORTED;
}
static void
_structmodule_free(void *module)
{
- _structmodule_clear((PyObject *)module);
+ (void)_structmodule_clear((PyObject *)module);
}
static int