[Python-Dev] cpython: fix compiler warning by implementing this more cleverly (original) (raw)
Victor Stinner victor.stinner at haypocalc.com
Wed Nov 23 10:40:36 CET 2011
- Previous message: [Python-Dev] cpython: fix compiler warning by implementing this more cleverly
- Next message: [Python-Dev] Python 3.4 Release Manager
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Le Mercredi 23 Novembre 2011 01:49:28 Terry Reedy a écrit :
The one-liner could be followed by assert(kind==1 || kind==2 || kind==4) which would also serve to remind the reader of the possibilities.
For a ready string, kind must be 1, 2 or 4. We might rename "kind" to "charsize" because its value changed from 1, 2, 3 to 1, 2, 4 (to make it easy to compute the size of a string: length * kind).
You are not supposed to see the secret kind==0 case. This value is only used for string created by _PyUnicode_New() and not ready yet:
str = _PyUnicode_New() /* use str / assert(PyUnicode_KIND(str) == 0); if (PyUnicode_READY(str) < 0) / error / assert(PyUnicode_KIND(str) != 0); / kind is 1, 2, 4 */
Thanks to the effort of t0rsten, Martin and me, quite all functions use the new API (PyUnicode_New). For example, PyUnicode_AsRawUnicodeEscapeString() starts by ensuring that the string is ready.
For your information, PyUnicode_KIND() fails with an assertion error in debug mode if the string is not ready.
--
I don't have an opinion about the one-liner vs the switch :-)
But if you want to fix compiler warnings, you should use "enum PyUnicode_Kind" type and PyUnicode_WCHAR_KIND should be removed from the enum.
Victor
- Previous message: [Python-Dev] cpython: fix compiler warning by implementing this more cleverly
- Next message: [Python-Dev] Python 3.4 Release Manager
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]