Refactor and clean up str.format() code (and helpers) in advance of optimizations.

This commit is contained in:
Eric Smith 2008-05-30 18:10:04 +00:00
parent 30fadc1799
commit dc13b79a38
15 changed files with 176 additions and 157 deletions

View file

@ -3,9 +3,6 @@
#define PY_SSIZE_T_CLEAN
#include "Python.h"
#include "formatter_string.h"
#include <ctype.h>
#ifdef COUNT_ALLOCS
@ -3939,6 +3936,35 @@ PyDoc_STRVAR(format__doc__,
\n\
");
static PyObject *
string__format__(PyObject* self, PyObject* args)
{
PyObject *format_spec;
PyObject *result = NULL;
PyObject *tmp = NULL;
/* If 2.x, convert format_spec to the same type as value */
/* This is to allow things like u''.format('') */
if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
goto done;
if (!(PyBytes_Check(format_spec) || PyUnicode_Check(format_spec))) {
PyErr_Format(PyExc_TypeError, "__format__ arg must be str "
"or unicode, not %s", Py_TYPE(format_spec)->tp_name);
goto done;
}
tmp = PyObject_Str(format_spec);
if (tmp == NULL)
goto done;
format_spec = tmp;
result = _PyBytes_FormatAdvanced(self,
PyBytes_AS_STRING(format_spec),
PyBytes_GET_SIZE(format_spec));
done:
Py_XDECREF(tmp);
return result;
}
PyDoc_STRVAR(p_format__doc__,
"S.__format__(format_spec) -> unicode\n\
\n\