[Python-Dev] Re: [Bug #121013] Bug in <stringobject>.join(<unicodestring>)

M.-A. Lemburg mal@lemburg.com
Tue, 28 Nov 2000 12:12:56 +0100


Michael Hudson wrote:
> 
> > Since not using PySequence_Fast() to initialize the protocol,
> > I'd suggest doing a Py_FatalError() with some explanatory
> > text which gets printed to stderr -- still better than a
> > segfault at some later point due to some dangling pointers...
> 
> So you'd want PySequence_Fast_GETITEM to look like
> 
> #define PySequence_Fast_GETITEM(s,i) \
>     (PyList_Check((s)) ? PyList_GET_ITEM((s),(i)) : \
>           (PyTuple_Check((s))? PyTuple_GET_ITEM((s),(i)) : \
>                   Py_FatalError("muffin!") ))
> 
> ?  That'd probably be fair - you'd want to check any performance hit, but
> I wouldn't be surprised if it was neglible.

Yes.
 
> [Fredrik's PySequence_Fast_* APIs]
> >
> > I think Fredrik speculated on having the compiler optimizers
> > taking care of the check...
> 
> gcc 2.95.1 doesn't seem to - even with -O9 you get stuff like
> 
> .stabn 68,0,825,.LM312-string_join
> .LM312:
>         movl PyList_Type@GOT(%ebx),%eax
>         cmpl %eax,4(%edi)
>         jne .L875
>         movl 12(%edi),%eax
>         jmp .L898
>         .p2align 4,,7
> .L875:
>         leal 12(%edi),%eax
> .L898:
>         movl -32(%ebp),%edx
>         movl (%eax,%edx,4),%esi
> 
> ... but I'm no expert in assembly reading.
> 
> > hmm, it would probably also help
> > to somehow declare PyTypeObject slots "const" -- is this possible
> > in a struct definition ?
> 
> I have no idea!

Me neither -- it could help the compiler when moving type
checks out of inner loops: the type slot of PyObject normally
doesn't change (except on Windows where you have to patch it
in order make VC++ happy).

Anyone got a working idea in this direction ?

-- 
Marc-Andre Lemburg
______________________________________________________________________
Company:                                        http://www.egenix.com/
Consulting:                                    http://www.lemburg.com/
Python Pages:                           http://www.lemburg.com/python/