[Python-Dev] Why is nb_inplace_power ternary?

"Martin v. Löwis" Martin.vonLoewis at hpi.uni-potsdam.de
Thu Feb 8 20:11:20 CET 2007


python at rcn.com schrieb:
>>>> 1. For 2.5.1, rewrite slot_nb_inplace_power to raise an exception
>>>> if the third argument is not None, and then invoke __ipow__ with only one argument.
> 
> Why would you change Py2.5?  There is no bug here.

There is: slot_nb_inplace has the signature

static PyObject * slot_nb_inplace_power(PyObject *self, PyObject * arg1)

yet it is stored in as_number.nb_inplace_power, which is defined as

typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *);
ternaryfunc nb_inplace_power;

This has undefined behavior. Even if it had, slot_nb_inplace_power
would silently discard its third argument.

Regards,
Martin


More information about the Python-Dev mailing list