Bug in PyNumber_InPlacePower implementation?
I was looking at the implementation of PyNumber_InPlacePower last night, and something about it struck me as odd. It starts off: if (HASINPLACE(v) && v->ob_type->tp_as_number && v->ob_type->tp_as_number->nb_inplace_power != NULL) { return ternary_op(v, w, z, NB_SLOT(nb_inplace_power), "**="); Now, looking at ternary_op, it appears that under some circumstances this could call the nb_inplace_power slot of the second or third argument before trying the first one: if (slotv) { if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) { x = slotw(v, w, z); i.e. if the 2nd argument is a subtype of the 1st, and it has an nb_inplace_power method, it will be called first. This looks wrong to me. Surely only the *first* argument should be checked for an inplace method when doing an inplace operation? That's the way it seems to be for all the other inplace operations. Is this a bug? Greg Ewing, Computer Science Dept, +--------------------------------------+ University of Canterbury, | A citizen of NewZealandCorp, a | Christchurch, New Zealand | wholly-owned subsidiary of USA Inc. | greg@cosc.canterbury.ac.nz +--------------------------------------+
participants (2)
-
Greg Ewing
-
Guido van Rossum