-- Bugfix 3453: coercion operations were doing an extra incref on coerced

objects.  Also found extra increfs on some newly-created quat and matrix
   objects, from calls to Matrix_Identity() and Quaternion_Identity().
This commit is contained in:
Ken Hughes
2005-12-05 19:02:30 +00:00
parent f98a5a8036
commit e209676d3d
4 changed files with 41 additions and 54 deletions

View File

@@ -658,21 +658,17 @@ static PyObject *Vector_neg(VectorObject *self)
then call vector.multiply(vector, scalar_cast_as_vector)*/
static int Vector_coerce(PyObject ** v1, PyObject ** v2)
{
PyObject *coerced = NULL;
if(!VectorObject_Check(*v2)) {
if(MatrixObject_Check(*v2) || PyFloat_Check(*v2) || PyInt_Check(*v2) ||
if(MatrixObject_Check(*v2) || PyFloat_Check(*v2) || PyInt_Check(*v2) ||
QuaternionObject_Check(*v2) || PointObject_Check(*v2)) {
coerced = EXPP_incr_ret(*v2);
*v2 = newVectorObject(NULL,3,Py_NEW);
((VectorObject*)*v2)->coerced_object = coerced;
}else{
return EXPP_ReturnIntError(PyExc_TypeError,
"vector.coerce(): unknown operand - can't coerce for numeric protocols\n");
}
PyObject *coerced = EXPP_incr_ret(*v2);
*v2 = newVectorObject(NULL,3,Py_NEW);
((VectorObject*)*v2)->coerced_object = coerced;
Py_INCREF (*v1);
return 0;
}
EXPP_incr2(*v1, *v2);
return 0;
return EXPP_ReturnIntError(PyExc_TypeError,
"vector.coerce(): unknown operand - can't coerce for numeric protocols");
}
//------------------------tp_doc
static char VectorObject_doc[] = "This is a wrapper for vector objects.";