diff options
-rw-r--r-- | Lib/test/test_descr.py | 11 | ||||
-rw-r--r-- | Objects/typeobject.c | 4 |
2 files changed, 13 insertions, 2 deletions
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 0c7def1..c9bd1cd 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -3306,6 +3306,16 @@ def testrmul(): vereq(2*a, "rmul") vereq(2.2*a, "rmul") +def testipow(): + # [SF bug 620179] + if verbose: + print "Testing correct invocation of __ipow__..." + class C(object): + def __ipow__(self, other): + pass + a = C() + a **= 2 + def do_this_first(): if verbose: print "Testing SF bug 551412 ..." @@ -3401,6 +3411,7 @@ def test_main(): slottrash() slotmultipleinheritance() testrmul() + testipow() if verbose: print "All OK" if __name__ == "__main__": diff --git a/Objects/typeobject.c b/Objects/typeobject.c index e11b87f..ed5b829 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -3399,7 +3399,7 @@ SLOT1(slot_nb_inplace_subtract, "__isub__", PyObject *, "O") SLOT1(slot_nb_inplace_multiply, "__imul__", PyObject *, "O") SLOT1(slot_nb_inplace_divide, "__idiv__", PyObject *, "O") SLOT1(slot_nb_inplace_remainder, "__imod__", PyObject *, "O") -SLOT2(slot_nb_inplace_power, "__ipow__", PyObject *, PyObject *, "OO") +SLOT1(slot_nb_inplace_power, "__ipow__", PyObject *, "O") SLOT1(slot_nb_inplace_lshift, "__ilshift__", PyObject *, "O") SLOT1(slot_nb_inplace_rshift, "__irshift__", PyObject *, "O") SLOT1(slot_nb_inplace_and, "__iand__", PyObject *, "O") @@ -4038,7 +4038,7 @@ static slotdef slotdefs[] = { IBSLOT("__imod__", nb_inplace_remainder, slot_nb_inplace_remainder, wrap_binaryfunc, "%"), IBSLOT("__ipow__", nb_inplace_power, slot_nb_inplace_power, - wrap_ternaryfunc, "**"), + wrap_binaryfunc, "**"), IBSLOT("__ilshift__", nb_inplace_lshift, slot_nb_inplace_lshift, wrap_binaryfunc, "<<"), IBSLOT("__irshift__", nb_inplace_rshift, slot_nb_inplace_rshift, |