mirror of
https://github.com/python/cpython.git
synced 2025-07-30 06:34:15 +00:00
Refactor and clean up str.format() code (and helpers) in advance of optimizations.
This commit is contained in:
parent
30fadc1799
commit
dc13b79a38
15 changed files with 176 additions and 157 deletions
|
@ -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");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue