summaryrefslogtreecommitdiffstats
path: root/Objects/unicodeobject.c
diff options
context:
space:
mode:
authorEric Smith <eric@trueblade.com>2008-05-30 18:10:04 (GMT)
committerEric Smith <eric@trueblade.com>2008-05-30 18:10:04 (GMT)
commitdc13b79a384691ed966f760a58d73a1b835e7d6b (patch)
tree40aa36feea2e0ee23f41801a8959990914e3fc71 /Objects/unicodeobject.c
parent30fadc17990baf4005081d2cdcb8d3adc9c45a7a (diff)
downloadcpython-dc13b79a384691ed966f760a58d73a1b835e7d6b.zip
cpython-dc13b79a384691ed966f760a58d73a1b835e7d6b.tar.gz
cpython-dc13b79a384691ed966f760a58d73a1b835e7d6b.tar.bz2
Refactor and clean up str.format() code (and helpers) in advance of optimizations.
Diffstat (limited to 'Objects/unicodeobject.c')
-rw-r--r--Objects/unicodeobject.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 81b6a66..3ffe99c 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -42,8 +42,6 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#define PY_SSIZE_T_CLEAN
#include "Python.h"
-#include "formatter_unicode.h"
-
#include "unicodeobject.h"
#include "ucnhash.h"
@@ -7863,6 +7861,35 @@ PyDoc_STRVAR(format__doc__,
\n\
");
+static PyObject *
+unicode__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_Unicode(format_spec);
+ if (tmp == NULL)
+ goto done;
+ format_spec = tmp;
+
+ result = _PyUnicode_FormatAdvanced(self,
+ PyUnicode_AS_UNICODE(format_spec),
+ PyUnicode_GET_SIZE(format_spec));
+done:
+ Py_XDECREF(tmp);
+ return result;
+}
+
PyDoc_STRVAR(p_format__doc__,
"S.__format__(format_spec) -> unicode\n\
\n\