Skip to content

Commit 6173a6a

Browse files
committed
UPBGE: Remove use of void * in python attributes callbacks.
Previously all the python callbacks were using void pointer to the instance to work from, but using a void * failed in some cast case. For example if you have a diamond inheritance solved by using a virtual inheritance the cast to void * then later to the class type will failed giving a correct base class: Base *base = new Final(); static_cast<Final *>(base) --> valid access to Final static_cast<Final *>((void *)base) --> invalid access to Final This behaviour is due of the C cast behavior for void * which is different than the C++ cast behavior. To solve any of these tenious issue, the usage of void * is replaced by PyObjectPlus * in all the python attributes functions. This as also the advantage to let static_cast check at compilation cast incompatiblity like the error in BL_ArmatureConstraint detected and solved in this commit.
1 parent da3a600 commit 6173a6a

File tree

127 files changed

+967
-966
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

127 files changed

+967
-966
lines changed

source/gameengine/Converter/BL_ActionActuator.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -563,13 +563,13 @@ PyAttributeDef BL_ActionActuator::Attributes[] = {
563563
KX_PYATTRIBUTE_NULL //Sentinel
564564
};
565565

566-
PyObject *BL_ActionActuator::pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
566+
PyObject *BL_ActionActuator::pyattr_get_action(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
567567
{
568568
BL_ActionActuator* self = static_cast<BL_ActionActuator*>(self_v);
569569
return PyUnicode_FromString(self->GetAction() ? self->GetAction()->id.name+2 : "");
570570
}
571571

572-
int BL_ActionActuator::pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
572+
int BL_ActionActuator::pyattr_set_action(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
573573
{
574574
BL_ActionActuator* self = static_cast<BL_ActionActuator*>(self_v);
575575

@@ -597,7 +597,7 @@ int BL_ActionActuator::pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF
597597

598598
}
599599

600-
PyObject *BL_ActionActuator::pyattr_get_channel_names(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
600+
PyObject *BL_ActionActuator::pyattr_get_channel_names(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
601601
{
602602
PyErr_SetString(PyExc_NotImplementedError, "BL_ActionActuator.channelNames no longer works, please use BL_ArmatureObject.channels instead");
603603
return NULL;
@@ -628,13 +628,13 @@ PyObject *BL_ActionActuator::pyattr_get_channel_names(void *self_v, const KX_PYA
628628
#endif
629629
}
630630

631-
PyObject *BL_ActionActuator::pyattr_get_use_continue(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
631+
PyObject *BL_ActionActuator::pyattr_get_use_continue(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
632632
{
633633
BL_ActionActuator* self = static_cast<BL_ActionActuator*>(self_v);
634634
return PyBool_FromLong(self->m_flag & ACT_FLAG_CONTINUE);
635635
}
636636

637-
int BL_ActionActuator::pyattr_set_use_continue(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
637+
int BL_ActionActuator::pyattr_set_use_continue(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
638638
{
639639
BL_ActionActuator* self = static_cast<BL_ActionActuator*>(self_v);
640640

@@ -646,13 +646,13 @@ int BL_ActionActuator::pyattr_set_use_continue(void *self_v, const KX_PYATTRIBUT
646646
return PY_SET_ATTR_SUCCESS;
647647
}
648648

649-
PyObject *BL_ActionActuator::pyattr_get_frame(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
649+
PyObject *BL_ActionActuator::pyattr_get_frame(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
650650
{
651651
BL_ActionActuator* self = static_cast<BL_ActionActuator*>(self_v);
652652
return PyFloat_FromDouble(((KX_GameObject*)self->m_gameobj)->GetActionFrame(self->m_layer));
653653
}
654654

655-
int BL_ActionActuator::pyattr_set_frame(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
655+
int BL_ActionActuator::pyattr_set_frame(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
656656
{
657657
BL_ActionActuator* self = static_cast<BL_ActionActuator*>(self_v);
658658

source/gameengine/Converter/BL_ActionActuator.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,15 @@ class BL_ActionActuator : public SCA_IActuator
7575
KX_PYMETHOD_O(BL_ActionActuator,GetChannel)
7676
KX_PYMETHOD_DOC(BL_ActionActuator,setChannel)
7777

78-
static PyObject* pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
79-
static int pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
80-
static PyObject* pyattr_get_channel_names(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
81-
static PyObject* pyattr_get_use_continue(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
82-
static int pyattr_set_use_continue(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
83-
static PyObject* pyattr_get_frame(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
84-
static int pyattr_set_frame(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
85-
86-
static int CheckBlendTime(void *self, const PyAttributeDef*)
78+
static PyObject* pyattr_get_action(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
79+
static int pyattr_set_action(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
80+
static PyObject* pyattr_get_channel_names(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
81+
static PyObject* pyattr_get_use_continue(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
82+
static int pyattr_set_use_continue(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
83+
static PyObject* pyattr_get_frame(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
84+
static int pyattr_set_frame(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
85+
86+
static int CheckBlendTime(PyObjectPlus *self, const PyAttributeDef*)
8787
{
8888
BL_ActionActuator* act = reinterpret_cast<BL_ActionActuator*>(self);
8989

@@ -93,7 +93,7 @@ class BL_ActionActuator : public SCA_IActuator
9393
return 0;
9494
}
9595

96-
static int CheckType(void *self, const PyAttributeDef*)
96+
static int CheckType(PyObjectPlus *self, const PyAttributeDef*)
9797
{
9898
BL_ActionActuator* act = reinterpret_cast<BL_ActionActuator*>(self);
9999

source/gameengine/Converter/BL_ArmatureActuator.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ PyAttributeDef BL_ArmatureActuator::Attributes[] = {
227227
KX_PYATTRIBUTE_NULL //Sentinel
228228
};
229229

230-
PyObject *BL_ArmatureActuator::pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
230+
PyObject *BL_ArmatureActuator::pyattr_get_object(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
231231
{
232232
BL_ArmatureActuator* actuator = static_cast<BL_ArmatureActuator*>(self);
233233
KX_GameObject *target = (attrdef->m_name == "target") ? actuator->m_gametarget : actuator->m_gamesubtarget;
@@ -237,7 +237,7 @@ PyObject *BL_ArmatureActuator::pyattr_get_object(void *self, const struct KX_PYA
237237
return target->GetProxy();
238238
}
239239

240-
int BL_ArmatureActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
240+
int BL_ArmatureActuator::pyattr_set_object(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
241241
{
242242
BL_ArmatureActuator* actuator = static_cast<BL_ArmatureActuator*>(self);
243243
KX_GameObject* &target = (attrdef->m_name == "target") ? actuator->m_gametarget : actuator->m_gamesubtarget;
@@ -257,7 +257,7 @@ int BL_ArmatureActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBU
257257
return PY_SET_ATTR_SUCCESS;
258258
}
259259

260-
PyObject *BL_ArmatureActuator::pyattr_get_constraint(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
260+
PyObject *BL_ArmatureActuator::pyattr_get_constraint(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
261261
{
262262
BL_ArmatureActuator* actuator = static_cast<BL_ArmatureActuator*>(self);
263263
BL_ArmatureConstraint* constraint = actuator->m_constraint;

source/gameengine/Converter/BL_ArmatureActuator.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ class BL_ArmatureActuator : public SCA_IActuator
7373
#ifdef WITH_PYTHON
7474

7575
/* These are used to get and set m_target */
76-
static PyObject *pyattr_get_constraint(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
77-
static PyObject *pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
78-
static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
76+
static PyObject *pyattr_get_constraint(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
77+
static PyObject *pyattr_get_object(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
78+
static int pyattr_set_object(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
7979

8080
#endif /* WITH_PYTHON */
8181

source/gameengine/Converter/BL_ArmatureChannel.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ PyAttributeDef BL_ArmatureChannel::AttributesPtr[] = {
146146
KX_PYATTRIBUTE_NULL //Sentinel
147147
};
148148

149-
PyObject *BL_ArmatureChannel::py_attr_getattr(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef)
149+
PyObject *BL_ArmatureChannel::py_attr_getattr(PyObjectPlus *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef)
150150
{
151151
BL_ArmatureChannel* self = static_cast<BL_ArmatureChannel*>(self_v);
152152
bPoseChannel* channel = self->m_posechannel;
@@ -174,7 +174,7 @@ PyObject *BL_ArmatureChannel::py_attr_getattr(void *self_v, const struct KX_PYAT
174174
return NULL;
175175
}
176176

177-
int BL_ArmatureChannel::py_attr_setattr(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
177+
int BL_ArmatureChannel::py_attr_setattr(PyObjectPlus *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
178178
{
179179
BL_ArmatureChannel* self = static_cast<BL_ArmatureChannel*>(self_v);
180180
bPoseChannel* channel = self->m_posechannel;
@@ -199,9 +199,10 @@ int BL_ArmatureChannel::py_attr_setattr(void *self_v, const struct KX_PYATTRIBUT
199199
return PY_SET_ATTR_FAIL;
200200
}
201201

202-
PyObject *BL_ArmatureChannel::py_attr_get_joint_rotation(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef)
202+
PyObject *BL_ArmatureChannel::py_attr_get_joint_rotation(PyObjectPlus *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef)
203203
{
204-
bPoseChannel* pchan = static_cast<bPoseChannel*>(self_v);
204+
BL_ArmatureChannel* self = static_cast<BL_ArmatureChannel*>(self_v);
205+
bPoseChannel* pchan = self->m_posechannel;
205206
// decompose the pose matrix in euler rotation
206207
float rest_mat[3][3];
207208
float pose_mat[3][3];
@@ -297,7 +298,7 @@ PyObject *BL_ArmatureChannel::py_attr_get_joint_rotation(void *self_v, const str
297298
return Vector_CreatePyObject(joints, 3, NULL);
298299
}
299300

300-
int BL_ArmatureChannel::py_attr_set_joint_rotation(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
301+
int BL_ArmatureChannel::py_attr_set_joint_rotation(PyObjectPlus *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
301302
{
302303
BL_ArmatureChannel* self = static_cast<BL_ArmatureChannel*>(self_v);
303304
bPoseChannel* pchan = self->m_posechannel;
@@ -439,7 +440,7 @@ PyAttributeDef BL_ArmatureBone::AttributesPtr[] = {
439440
KX_PYATTRIBUTE_NULL //Sentinel
440441
};
441442

442-
PyObject *BL_ArmatureBone::py_bone_get_parent(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
443+
PyObject *BL_ArmatureBone::py_bone_get_parent(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
443444
{
444445
Bone* bone = reinterpret_cast<Bone*>(self);
445446
if (bone->parent) {
@@ -449,7 +450,7 @@ PyObject *BL_ArmatureBone::py_bone_get_parent(void *self, const struct KX_PYATTR
449450
Py_RETURN_NONE;
450451
}
451452

452-
PyObject *BL_ArmatureBone::py_bone_get_children(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
453+
PyObject *BL_ArmatureBone::py_bone_get_children(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
453454
{
454455
Bone* bone = reinterpret_cast<Bone*>(self);
455456
Bone* child;

source/gameengine/Converter/BL_ArmatureChannel.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ class BL_ArmatureChannel : public CValue
6767
// Python access
6868
virtual PyObject *py_repr(void);
6969

70-
static PyObject *py_attr_getattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
71-
static int py_attr_setattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
72-
static PyObject *py_attr_get_joint_rotation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
73-
static int py_attr_set_joint_rotation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
70+
static PyObject *py_attr_getattr(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
71+
static int py_attr_setattr(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
72+
static PyObject *py_attr_get_joint_rotation(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
73+
static int py_attr_set_joint_rotation(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
7474
#endif /* WITH_PYTHON */
7575
};
7676

@@ -90,8 +90,8 @@ class BL_ArmatureBone : public PyObjectPlus
9090

9191
#ifdef WITH_PYTHON
9292
static PyObject *py_bone_repr(PyObject *self);
93-
static PyObject *py_bone_get_parent(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
94-
static PyObject *py_bone_get_children(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
93+
static PyObject *py_bone_get_parent(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
94+
static PyObject *py_bone_get_children(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
9595
#endif
9696

9797
};

source/gameengine/Converter/BL_ArmatureConstraint.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ PyAttributeDef BL_ArmatureConstraint::Attributes[] = {
287287
};
288288

289289

290-
PyObject *BL_ArmatureConstraint::py_attr_getattr(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef)
290+
PyObject *BL_ArmatureConstraint::py_attr_getattr(PyObjectPlus *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef)
291291
{
292292
BL_ArmatureConstraint* self = static_cast<BL_ArmatureConstraint*>(self_v);
293293
bConstraint* constraint = self->m_constraint;
@@ -352,7 +352,7 @@ PyObject *BL_ArmatureConstraint::py_attr_getattr(void *self_v, const struct KX_P
352352
return NULL;
353353
}
354354

355-
int BL_ArmatureConstraint::py_attr_setattr(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
355+
int BL_ArmatureConstraint::py_attr_setattr(PyObjectPlus *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
356356
{
357357
BL_ArmatureConstraint* self = static_cast<BL_ArmatureConstraint*>(self_v);
358358
bConstraint* constraint = self->m_constraint;

source/gameengine/Converter/BL_ArmatureConstraint.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ class BL_ArmatureConstraint : public CValue
112112
// Python access
113113
virtual PyObject *py_repr(void);
114114

115-
static PyObject *py_attr_getattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
116-
static int py_attr_setattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
115+
static PyObject *py_attr_getattr(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
116+
static int py_attr_setattr(PyObjectPlus *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
117117
#endif /* WITH_PYTHON */
118118
};
119119

source/gameengine/Converter/BL_ArmatureObject.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -637,13 +637,13 @@ PyAttributeDef BL_ArmatureObject::Attributes[] = {
637637
KX_PYATTRIBUTE_NULL //Sentinel
638638
};
639639

640-
PyObject *BL_ArmatureObject::pyattr_get_constraints(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
640+
PyObject *BL_ArmatureObject::pyattr_get_constraints(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
641641
{
642642
BL_ArmatureObject *self = static_cast<BL_ArmatureObject *>(self_v);
643643
return self->m_controlledConstraints->GetProxy();
644644
}
645645

646-
PyObject *BL_ArmatureObject::pyattr_get_channels(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
646+
PyObject *BL_ArmatureObject::pyattr_get_channels(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
647647
{
648648
BL_ArmatureObject *self = static_cast<BL_ArmatureObject *>(self_v);
649649
self->LoadChannels(); // make sure we have the channels

source/gameengine/Converter/BL_ArmatureObject.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,8 @@ class BL_ArmatureObject : public KX_GameObject
133133
#ifdef WITH_PYTHON
134134

135135
// PYTHON
136-
static PyObject *pyattr_get_constraints(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
137-
static PyObject *pyattr_get_channels(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
136+
static PyObject *pyattr_get_constraints(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
137+
static PyObject *pyattr_get_channels(PyObjectPlus *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
138138
KX_PYMETHOD_DOC_NOARGS(BL_ArmatureObject, update);
139139
KX_PYMETHOD_DOC_NOARGS(BL_ArmatureObject, draw);
140140

0 commit comments

Comments
 (0)