Fix LoPairingInfo python binding not using a proper type width for its value member, causing truncation and sign extending on platforms where long is a 32bits type (ie Windows)

This commit is contained in:
angie 2024-01-28 12:13:58 -03:00
parent c6e988affa
commit 83df386cc6

View File

@ -22,8 +22,6 @@ static int rabbitizer_type_LoPairingInfo_init(PyRabbitizerLoPairingInfo *self, P
static PyMemberDef rabbitizer_type_LoPairingInfo_members[] = {
{ "instrOffset", T_INT, offsetof(PyRabbitizerLoPairingInfo, pairingInfo.instrOffset), 0, "" },
{ "value", T_LONG, offsetof(PyRabbitizerLoPairingInfo, pairingInfo.value), 0, "" },
{ "shouldProcess", T_BOOL, offsetof(PyRabbitizerLoPairingInfo, pairingInfo.shouldProcess), 0, "" },
{ "isGpRel", T_BOOL, offsetof(PyRabbitizerLoPairingInfo, pairingInfo.isGpRel), 0, "" },
{ "isGpGot", T_BOOL, offsetof(PyRabbitizerLoPairingInfo, pairingInfo.isGpGot), 0, "" },
@ -32,6 +30,32 @@ static PyMemberDef rabbitizer_type_LoPairingInfo_members[] = {
};
#define DEF_MEMBER_GET_INT32(name) \
static PyObject *rabbitizer_type_LoPairingInfo_member_get_##name(PyRabbitizerLoPairingInfo *self, UNUSED PyObject *closure) { \
return PyLong_FromLong(self->pairingInfo.name); \
}
#define DEF_MEMBER_GET_INT64(name) \
static PyObject *rabbitizer_type_LoPairingInfo_member_get_##name(PyRabbitizerLoPairingInfo *self, UNUSED PyObject *closure) { \
return PyLong_FromLongLong(self->pairingInfo.name); \
}
DEF_MEMBER_GET_INT32(instrOffset)
DEF_MEMBER_GET_INT64(value)
#define MEMBER_GET(name, docs) { #name, (getter) rabbitizer_type_LoPairingInfo_member_get_##name, (setter) NULL, PyDoc_STR(docs), NULL }
#define MEMBER_SET(name, docs) { #name, (getter) NULL, (setter) rabbitizer_type_LoPairingInfo_member_set_##name, PyDoc_STR(docs), NULL }
#define MEMBER_GET_SET(name, docs) { #name, (getter) rabbitizer_type_LoPairingInfo_member_get_##name, (setter) rabbitizer_type_LoPairingInfo_member_set_##name, PyDoc_STR(docs), NULL }
static PyGetSetDef rabbitizer_type_LoPairingInfo_getsetters[] = {
MEMBER_GET(instrOffset, ""),
MEMBER_GET(value, ""),
{ 0 }
};
DEF_RAB_TYPE(LoPairingInfo)
@ -49,5 +73,5 @@ PyTypeObject rabbitizer_type_LoPairingInfo_TypeObject = {
// .tp_str = (reprfunc) rabbitizer_type_LoPairingInfo_str,
.tp_members = rabbitizer_type_LoPairingInfo_members,
// .tp_methods = rabbitizer_type_Instr_methods,
// .tp_getset = Instr_getsetters,
.tp_getset = rabbitizer_type_LoPairingInfo_getsetters,
};