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

@ -14,9 +14,6 @@
#include <ieeefp.h>
#endif
#include "formatter_string.h"
#ifdef _OSF_SOURCE
/* OSF1 5.1 doesn't make this available with XOPEN_SOURCE_EXTENDED defined */
extern int finite(double);
@ -1398,26 +1395,22 @@ float__format__(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
return NULL;
if (PyBytes_Check(format_spec))
return string_float__format__(self, args);
return _PyFloat_FormatAdvanced(self,
PyBytes_AS_STRING(format_spec),
PyBytes_GET_SIZE(format_spec));
if (PyUnicode_Check(format_spec)) {
/* Convert format_spec to a str */
PyObject *result = NULL;
PyObject *newargs = NULL;
PyObject *string_format_spec = NULL;
PyObject *result;
PyObject *str_spec = PyObject_Str(format_spec);
string_format_spec = PyObject_Str(format_spec);
if (string_format_spec == NULL)
goto done;
if (str_spec == NULL)
return NULL;
newargs = Py_BuildValue("(O)", string_format_spec);
if (newargs == NULL)
goto done;
result = _PyFloat_FormatAdvanced(self,
PyBytes_AS_STRING(str_spec),
PyBytes_GET_SIZE(str_spec));
result = string_float__format__(self, newargs);
done:
Py_XDECREF(string_format_spec);
Py_XDECREF(newargs);
Py_DECREF(str_spec);
return result;
}
PyErr_SetString(PyExc_TypeError, "__format__ requires str or unicode");