Lisandro Dalcin wrote:
> Here you have the patch... Implemented as an (inline) function in a
> utility code

Since it's never used for anything but string equality checks, it would be
better to restrict it to that (i.e. 1/0), instead of using the normal
strcmp() -1,0,1 return values and additionally checking for "== 0"
everywhere in the code. Maybe call it "__Pyx_StrEqual()".


> * The API import function uses a different thing, just a while loop. I
> do not want to complicate things in generated API headers for
> something that can be done with two auxiliar variables and a one-line
> while loop.

Sure, good idea.


> * In the keyword handling code, I've used _PyString_Eq(), which is
> available in the C-API for Py2. If Python's C-API provides what we
> need, let's use it. Moreover, just in case, please see the
> implementation of _PyString_Eq(), it is smarter (and likely faster)
> than a strcmp() call ;-).

Note that I already used (almost) the same optimisation in the code, which
now becomes superfluous. Although I expect it to be a lot faster to check
the length inside the loop before calling into the Python's C-API, these
checks should be rare enough to just make that

        if (_PyString_Eq(**name, key)) ...

The real fast-path is the loop with plain string pointer equality checks
before all that. (BTW, note that this function is only available in Py2, so
it's perfectly ok to use it here but not in general).

Stefan
_______________________________________________
Cython-dev mailing list
Cython-dev@codespeak.net
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to