[Python-Dev] Why is nb_inplace_add copied to sq_inplace_concat? (original) (raw)

Nick Coghlan ncoghlan at gmail.com
Fri May 17 05:41:32 CEST 2013


On Fri, May 17, 2013 at 1:38 PM, Nick Coghlan <ncoghlan at gmail.com> wrote:

On Fri, May 17, 2013 at 9:17 AM, Matt Newell <newellm at blur.com> wrote:

I don't really understand what the fixupslotdispatchers function is doing, but it does seem like there must be a bug either in what it's doing, or in PyNumberInPlaceAdd's handling of a NotImplemented return value from sqinplaceconcat. I didn't read your post in detail, but operand precedence in CPython is known to be broken for types which only populate the sq* slots without also populating the corresponding nb* slots: http://bugs.python.org/issue11477

Oops, I meant to state that one of the consequences of the bug is that returning NotImplemented from the sq_* methods doesn't work at all - it's never checked and thus never turned into a TypeError. That's why changing to delegation from the nb_* slots is the most promising approach - all that handling is there and correct for the numeric types, but pure sequence types (which can only be created from C code) bypass that handling.

I did read enough of the original post to know that was the symptom you were seeing, I just failed to mention that in my initial reply...

Cheers, Nick.

-- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia



More information about the Python-Dev mailing list