Author: eric.smith
Date: Sat Sep 1 12:56:01 2007
New Revision: 57866
Modified:
python/branches/py3k/Lib/test/test_builtin.py
python/branches/py3k/Lib/test/test_unicode.py
python/branches/py3k/Objects/stringlib/formatter.h
python/branches/py3k/Objects/stringlib/stringdefs.h
python/branches/py3k/Objects/stringlib/unicodedefs.h
python/branches/py3k/Python/bltinmodule.c
Log:
Changed to use 'U' argument to PyArg_ParseTuple, instead of manually checking
for unicode objects.
Modified: python/branches/py3k/Lib/test/test_builtin.py
==============================================================================
--- python/branches/py3k/Lib/test/test_builtin.py (original)
+++ python/branches/py3k/Lib/test/test_builtin.py Sat Sep 1 12:56:01 2007
@@ -525,10 +525,15 @@
return str(self.x) + format_spec
# class that returns a bad type from __format__
- class H:
+ class B:
def __format__(self, format_spec):
return 1.0
+ # class that is derived from string, used
+ # as a format spec
+ class C(str):
+ pass
+
self.assertEqual(format(3, ''), '3')
self.assertEqual(format(A(3), 'spec'), '3spec')
@@ -550,7 +555,10 @@
empty_format_spec(None)
# TypeError because self.__format__ returns the wrong type
- self.assertRaises(TypeError, format, H(), "")
+ self.assertRaises(TypeError, format, B(), "")
+
+ # make sure we can take a subclass of str as a format spec
+ self.assertEqual(format(0, C('10')), ' 0')
def test_getattr(self):
import sys
Modified: python/branches/py3k/Lib/test/test_unicode.py
==============================================================================
--- python/branches/py3k/Lib/test/test_unicode.py (original)
+++ python/branches/py3k/Lib/test/test_unicode.py Sat Sep 1 12:56:01 2007
@@ -581,9 +581,6 @@
self.assertRaises(ValueError, format, "", "-")
self.assertRaises(ValueError, "{0:=s}".format, '')
- # check that __format__ returns a string
- #self.assertRaises(TypeError, "{0}".format, H())
-
def test_formatting(self):
string_tests.MixinStrUnicodeUserStringTest.test_formatting(self)
# Testing Unicode formatting strings...
Modified: python/branches/py3k/Objects/stringlib/formatter.h
==============================================================================
--- python/branches/py3k/Objects/stringlib/formatter.h (original)
+++ python/branches/py3k/Objects/stringlib/formatter.h Sat Sep 1 12:56:01 2007
@@ -768,12 +768,8 @@
PyObject *result = NULL;
InternalFormatSpec format;
- if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
+ if (!PyArg_ParseTuple(args, STRINGLIB_PARSE_CODE ":__format__",
&format_spec))
goto done;
- if (!STRINGLIB_CHECK(format_spec)) {
- PyErr_SetString(PyExc_TypeError, STRINGLIB_TYPE_NAME " object
required");
- goto done;
- }
/* check for the special case of zero length format spec, make
it equivalent to str(value) */
@@ -843,12 +839,8 @@
PyObject *tmp = NULL;
InternalFormatSpec format;
- if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
- goto done;
- if (!STRINGLIB_CHECK(format_spec)) {
- PyErr_SetString(PyExc_TypeError, STRINGLIB_TYPE_NAME " object
required");
+ if (!PyArg_ParseTuple(args, STRINGLIB_PARSE_CODE ":__format__",
&format_spec))
goto done;
- }
/* check for the special case of zero length format spec, make
it equivalent to str(value) */
@@ -917,12 +909,8 @@
PyObject *tmp = NULL;
InternalFormatSpec format;
- if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
- goto done;
- if (!STRINGLIB_CHECK(format_spec)) {
- PyErr_SetString(PyExc_TypeError, STRINGLIB_TYPE_NAME " object
required");
+ if (!PyArg_ParseTuple(args, STRINGLIB_PARSE_CODE ":__format__",
&format_spec))
goto done;
- }
/* check for the special case of zero length format spec, make
it equivalent to str(value) */
Modified: python/branches/py3k/Objects/stringlib/stringdefs.h
==============================================================================
--- python/branches/py3k/Objects/stringlib/stringdefs.h (original)
+++ python/branches/py3k/Objects/stringlib/stringdefs.h Sat Sep 1 12:56:01 2007
@@ -8,6 +8,7 @@
#define STRINGLIB_CHAR char
#define STRINGLIB_TYPE_NAME "string"
+#define STRINGLIB_PARSE_CODE "S"
#define STRINGLIB_EMPTY string_empty
#define STRINGLIB_ISDECIMAL(x) ((x >= '0') && (x <= '9'))
#define STRINGLIB_TODECIMAL(x) (STRINGLIB_ISDECIMAL(x) ? (x - '0') : -1)
Modified: python/branches/py3k/Objects/stringlib/unicodedefs.h
==============================================================================
--- python/branches/py3k/Objects/stringlib/unicodedefs.h (original)
+++ python/branches/py3k/Objects/stringlib/unicodedefs.h Sat Sep 1
12:56:01 2007
@@ -8,6 +8,7 @@
#define STRINGLIB_CHAR Py_UNICODE
#define STRINGLIB_TYPE_NAME "unicode"
+#define STRINGLIB_PARSE_CODE "U"
#define STRINGLIB_EMPTY unicode_empty
#define STRINGLIB_ISDECIMAL Py_UNICODE_ISDECIMAL
#define STRINGLIB_TODECIMAL Py_UNICODE_TODECIMAL
Modified: python/branches/py3k/Python/bltinmodule.c
==============================================================================
--- python/branches/py3k/Python/bltinmodule.c (original)
+++ python/branches/py3k/Python/bltinmodule.c Sat Sep 1 12:56:01 2007
@@ -293,7 +293,7 @@
goto done;
}
- if (!PyArg_ParseTuple(args, "O|O:format", &value, &spec))
+ if (!PyArg_ParseTuple(args, "O|U:format", &value, &spec))
goto done;
/* initialize the default value */
_______________________________________________
Python-3000-checkins mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000-checkins