diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index acdde6d62a1..43f65e206b8 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -625,9 +625,13 @@ always available. .. data:: maxunicode - An integer giving the largest supported code point for a Unicode character. The - value of this depends on the configuration option that specifies whether Unicode - characters are stored as UCS-2 or UCS-4. + An integer giving the value of the largest Unicode code point, + i.e. ``1114111`` (``0x10FFFF`` in hexadecimal). + + .. versionchanged:: 3.3 + Before :pep:`393`, :data:`sys.maxunicode` used to return either ``0xFFFF`` + or ``0x10FFFF``, depending on the configuration option that specified + whether Unicode characters were stored as UCS-2 or UCS-4. .. data:: meta_path diff --git a/Doc/whatsnew/3.3.rst b/Doc/whatsnew/3.3.rst index 717e4e4748d..3cd4dd1f825 100644 --- a/Doc/whatsnew/3.3.rst +++ b/Doc/whatsnew/3.3.rst @@ -55,6 +55,17 @@ PEP XXX: Stub ============= +PEP 393: Flexible String Representation +======================================= + +XXX Add list of changes introduced by :pep:`393` here: + +* The value of :data:`sys.maxunicode` is now always ``1114111`` (``0x10FFFF`` + in hexadecimal). The :c:func:`PyUnicode_GetMax` function still returns + either ``0xFFFF`` or ``0x10FFFF`` for backward compatibility, and it should + not be used with the new Unicode API (see :issue:`13054`). + + Other Language Changes ====================== diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index 0b7bbf12966..c99f4d7e092 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -447,6 +447,7 @@ class SysModuleTest(unittest.TestCase): self.assertIsInstance(sys.maxsize, int) self.assertIsInstance(sys.maxunicode, int) + self.assertEqual(sys.maxunicode, 0x10FFFF) self.assertIsInstance(sys.platform, str) self.assertIsInstance(sys.prefix, str) self.assertIsInstance(sys.version, str) diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index b61f0581b32..45d56f7f187 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -207,7 +207,8 @@ static unsigned char ascii_linebreak[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - +/* The max unicode value is always 0x10FFFF while using the PEP-393 API. + This function is kept for backward compatibility with the old API. */ Py_UNICODE PyUnicode_GetMax(void) { diff --git a/Python/sysmodule.c b/Python/sysmodule.c index b5492035365..dea21490e29 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -1261,7 +1261,7 @@ float_repr_style -- string indicating the style of repr() output for floats\n\ hexversion -- version information encoded as a single integer\n\ int_info -- a struct sequence with information about the int implementation.\n\ maxsize -- the largest supported length of containers.\n\ -maxunicode -- the largest supported character\n\ +maxunicode -- the value of the largest Unicode codepoint\n\ platform -- platform identifier\n\ prefix -- prefix used to find the Python library\n\ thread_info -- a struct sequence with information about the thread implementation.\n\ @@ -1536,7 +1536,7 @@ _PySys_Init(void) SET_SYS_FROM_STRING("hash_info", get_hash_info()); SET_SYS_FROM_STRING("maxunicode", - PyLong_FromLong(PyUnicode_GetMax())); + PyLong_FromLong(0x10FFFF)); SET_SYS_FROM_STRING("builtin_module_names", list_builtin_module_names()); {