Don't check for the maximum character when copying from unicodeobject.c

* Create copy_characters() function which doesn't check for the maximum
   character in release mode
 * _PyUnicode_CheckConsistency() is no more static to be able to use it
   in _PyUnicode_FormatAdvanced() (in formatter_unicode.c)
 * _PyUnicode_CheckConsistency() checks the string hash
This commit is contained in:
Victor Stinner 2011-10-06 01:45:57 +02:00
parent 05d1189566
commit fb9ea8c57e
3 changed files with 198 additions and 193 deletions

View file

@ -1284,33 +1284,31 @@ _PyUnicode_FormatAdvanced(PyObject *obj,
Py_ssize_t start, Py_ssize_t end)
{
InternalFormatSpec format;
PyObject *result = NULL;
PyObject *result;
/* check for the special case of zero length format spec, make
it equivalent to str(obj) */
if (start == end) {
result = PyObject_Str(obj);
goto done;
}
if (start == end)
return PyObject_Str(obj);
/* parse the format_spec */
if (!parse_internal_render_format_spec(format_spec, start, end,
&format, 's', '<'))
goto done;
return NULL;
/* type conversion? */
switch (format.type) {
case 's':
/* no type conversion needed, already a string. do the formatting */
result = format_string_internal(obj, &format);
if (result != NULL)
assert(_PyUnicode_CheckConsistency(result, 1));
break;
default:
/* unknown */
unknown_presentation_type(format.type, obj->ob_type->tp_name);
goto done;
result = NULL;
}
done:
return result;
}