mirror of https://github.com/python/cpython
Revert r63934 -- it was mixing two patches.
This commit is contained in:
parent
f954c4b9fb
commit
a26f8ca668
|
@ -144,13 +144,6 @@ the Python configuration.
|
||||||
|
|
||||||
Return 1 or 0 depending on whether *ch* is an alphanumeric character.
|
Return 1 or 0 depending on whether *ch* is an alphanumeric character.
|
||||||
|
|
||||||
.. cfunction:: int Py_UNICODE_ISPRINTABLE(Py_UNICODE ch)
|
|
||||||
|
|
||||||
Return 1 or 0 depending on whether *ch* is a printable character.
|
|
||||||
Characters defined in the Unicode character database as "Other"
|
|
||||||
or "Separator" other than ASCII space(0x20) are not considered
|
|
||||||
printable.
|
|
||||||
|
|
||||||
These APIs can be used for fast direct character conversions:
|
These APIs can be used for fast direct character conversions:
|
||||||
|
|
||||||
|
|
||||||
|
@ -235,9 +228,6 @@ APIs:
|
||||||
+===================+=====================+================================+
|
+===================+=====================+================================+
|
||||||
| :attr:`%%` | *n/a* | The literal % character. |
|
| :attr:`%%` | *n/a* | The literal % character. |
|
||||||
+-------------------+---------------------+--------------------------------+
|
+-------------------+---------------------+--------------------------------+
|
||||||
| :attr:`%a` | PyObject\* | The result of calling |
|
|
||||||
| | | :func:`ascii`. |
|
|
||||||
+-------------------+---------------------+--------------------------------+
|
|
||||||
| :attr:`%c` | int | A single character, |
|
| :attr:`%c` | int | A single character, |
|
||||||
| | | represented as an C int. |
|
| | | represented as an C int. |
|
||||||
+-------------------+---------------------+--------------------------------+
|
+-------------------+---------------------+--------------------------------+
|
||||||
|
|
|
@ -91,14 +91,6 @@ are always available. They are listed here in alphabetical order.
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
.. function:: ascii(object)
|
|
||||||
|
|
||||||
As :func:`repr`, return a string containing a printable
|
|
||||||
representation of an object. But unlike :func:`repr`, the non-ASCII
|
|
||||||
characters in the string returned by :func:`ascii`() are hex-escaped
|
|
||||||
to generate a same string as :func:`repr` in Python 2.
|
|
||||||
|
|
||||||
|
|
||||||
.. function:: bin(x)
|
.. function:: bin(x)
|
||||||
|
|
||||||
Convert an integer number to a binary string. The result is a valid Python
|
Convert an integer number to a binary string. The result is a valid Python
|
||||||
|
|
|
@ -774,14 +774,6 @@ functions based on regular expressions.
|
||||||
least one cased character, false otherwise.
|
least one cased character, false otherwise.
|
||||||
|
|
||||||
|
|
||||||
.. method:: str.isprintable()
|
|
||||||
|
|
||||||
Return true if all characters in the string are printable and there is at
|
|
||||||
least one character, false otherwise. Characters defined in the Unicode
|
|
||||||
character database as "Other" or "Separator" other than ASCII space(0x20) are
|
|
||||||
not considered printable.
|
|
||||||
|
|
||||||
|
|
||||||
.. method:: str.isspace()
|
.. method:: str.isspace()
|
||||||
|
|
||||||
Return true if there are only whitespace characters in the string and there is
|
Return true if there are only whitespace characters in the string and there is
|
||||||
|
|
|
@ -231,6 +231,8 @@ always available.
|
||||||
+------------------------------+------------------------------------------+
|
+------------------------------+------------------------------------------+
|
||||||
| :const:`ignore_environment` | -E |
|
| :const:`ignore_environment` | -E |
|
||||||
+------------------------------+------------------------------------------+
|
+------------------------------+------------------------------------------+
|
||||||
|
| :const:`tabcheck` | -t or -tt |
|
||||||
|
+------------------------------+------------------------------------------+
|
||||||
| :const:`verbose` | -v |
|
| :const:`verbose` | -v |
|
||||||
+------------------------------+------------------------------------------+
|
+------------------------------+------------------------------------------+
|
||||||
| :const:`unicode` | -U |
|
| :const:`unicode` | -U |
|
||||||
|
|
|
@ -222,6 +222,13 @@ Miscellaneous options
|
||||||
manipulations of :data:`sys.path` that it entails.
|
manipulations of :data:`sys.path` that it entails.
|
||||||
|
|
||||||
|
|
||||||
|
.. cmdoption:: -t
|
||||||
|
|
||||||
|
Issue a warning when a source file mixes tabs and spaces for indentation in a
|
||||||
|
way that makes it depend on the worth of a tab expressed in spaces. Issue an
|
||||||
|
error when the option is given twice (:option:`-tt`).
|
||||||
|
|
||||||
|
|
||||||
.. cmdoption:: -u
|
.. cmdoption:: -u
|
||||||
|
|
||||||
Force stdin, stdout and stderr to be totally unbuffered. On systems where it
|
Force stdin, stdout and stderr to be totally unbuffered. On systems where it
|
||||||
|
|
|
@ -14,6 +14,7 @@ PyAPI_DATA(int) Py_NoSiteFlag;
|
||||||
PyAPI_DATA(int) Py_BytesWarningFlag;
|
PyAPI_DATA(int) Py_BytesWarningFlag;
|
||||||
PyAPI_DATA(int) Py_UseClassExceptionsFlag;
|
PyAPI_DATA(int) Py_UseClassExceptionsFlag;
|
||||||
PyAPI_DATA(int) Py_FrozenFlag;
|
PyAPI_DATA(int) Py_FrozenFlag;
|
||||||
|
PyAPI_DATA(int) Py_TabcheckFlag;
|
||||||
PyAPI_DATA(int) Py_IgnoreEnvironmentFlag;
|
PyAPI_DATA(int) Py_IgnoreEnvironmentFlag;
|
||||||
PyAPI_DATA(int) Py_DivisionWarningFlag;
|
PyAPI_DATA(int) Py_DivisionWarningFlag;
|
||||||
PyAPI_DATA(int) Py_DontWriteBytecodeFlag;
|
PyAPI_DATA(int) Py_DontWriteBytecodeFlag;
|
||||||
|
|
|
@ -217,7 +217,6 @@ typedef PY_UNICODE_TYPE Py_UNICODE;
|
||||||
# define _PyUnicode_IsLinebreak _PyUnicodeUCS2_IsLinebreak
|
# define _PyUnicode_IsLinebreak _PyUnicodeUCS2_IsLinebreak
|
||||||
# define _PyUnicode_IsLowercase _PyUnicodeUCS2_IsLowercase
|
# define _PyUnicode_IsLowercase _PyUnicodeUCS2_IsLowercase
|
||||||
# define _PyUnicode_IsNumeric _PyUnicodeUCS2_IsNumeric
|
# define _PyUnicode_IsNumeric _PyUnicodeUCS2_IsNumeric
|
||||||
# define _PyUnicode_IsPrintable _PyUnicodeUCS2_IsPrintable
|
|
||||||
# define _PyUnicode_IsTitlecase _PyUnicodeUCS2_IsTitlecase
|
# define _PyUnicode_IsTitlecase _PyUnicodeUCS2_IsTitlecase
|
||||||
# define _PyUnicode_IsXidStart _PyUnicodeUCS2_IsXidStart
|
# define _PyUnicode_IsXidStart _PyUnicodeUCS2_IsXidStart
|
||||||
# define _PyUnicode_IsXidContinue _PyUnicodeUCS2_IsXidContinue
|
# define _PyUnicode_IsXidContinue _PyUnicodeUCS2_IsXidContinue
|
||||||
|
@ -312,7 +311,6 @@ typedef PY_UNICODE_TYPE Py_UNICODE;
|
||||||
# define _PyUnicode_IsLinebreak _PyUnicodeUCS4_IsLinebreak
|
# define _PyUnicode_IsLinebreak _PyUnicodeUCS4_IsLinebreak
|
||||||
# define _PyUnicode_IsLowercase _PyUnicodeUCS4_IsLowercase
|
# define _PyUnicode_IsLowercase _PyUnicodeUCS4_IsLowercase
|
||||||
# define _PyUnicode_IsNumeric _PyUnicodeUCS4_IsNumeric
|
# define _PyUnicode_IsNumeric _PyUnicodeUCS4_IsNumeric
|
||||||
# define _PyUnicode_IsPrintable _PyUnicodeUCS4_IsPrintable
|
|
||||||
# define _PyUnicode_IsTitlecase _PyUnicodeUCS4_IsTitlecase
|
# define _PyUnicode_IsTitlecase _PyUnicodeUCS4_IsTitlecase
|
||||||
# define _PyUnicode_IsXidStart _PyUnicodeUCS4_IsXidStart
|
# define _PyUnicode_IsXidStart _PyUnicodeUCS4_IsXidStart
|
||||||
# define _PyUnicode_IsXidContinue _PyUnicodeUCS4_IsXidContinue
|
# define _PyUnicode_IsXidContinue _PyUnicodeUCS4_IsXidContinue
|
||||||
|
@ -353,7 +351,6 @@ typedef PY_UNICODE_TYPE Py_UNICODE;
|
||||||
#define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch)
|
#define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch)
|
||||||
#define Py_UNICODE_ISDIGIT(ch) _PyUnicode_IsDigit(ch)
|
#define Py_UNICODE_ISDIGIT(ch) _PyUnicode_IsDigit(ch)
|
||||||
#define Py_UNICODE_ISNUMERIC(ch) _PyUnicode_IsNumeric(ch)
|
#define Py_UNICODE_ISNUMERIC(ch) _PyUnicode_IsNumeric(ch)
|
||||||
#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
|
|
||||||
|
|
||||||
#define Py_UNICODE_TODECIMAL(ch) _PyUnicode_ToDecimalDigit(ch)
|
#define Py_UNICODE_TODECIMAL(ch) _PyUnicode_ToDecimalDigit(ch)
|
||||||
#define Py_UNICODE_TODIGIT(ch) _PyUnicode_ToDigit(ch)
|
#define Py_UNICODE_TODIGIT(ch) _PyUnicode_ToDigit(ch)
|
||||||
|
@ -384,7 +381,6 @@ extern const unsigned char _Py_ascii_whitespace[];
|
||||||
#define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch)
|
#define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch)
|
||||||
#define Py_UNICODE_ISDIGIT(ch) _PyUnicode_IsDigit(ch)
|
#define Py_UNICODE_ISDIGIT(ch) _PyUnicode_IsDigit(ch)
|
||||||
#define Py_UNICODE_ISNUMERIC(ch) _PyUnicode_IsNumeric(ch)
|
#define Py_UNICODE_ISNUMERIC(ch) _PyUnicode_IsNumeric(ch)
|
||||||
#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
|
|
||||||
|
|
||||||
#define Py_UNICODE_TODECIMAL(ch) _PyUnicode_ToDecimalDigit(ch)
|
#define Py_UNICODE_TODECIMAL(ch) _PyUnicode_ToDecimalDigit(ch)
|
||||||
#define Py_UNICODE_TODIGIT(ch) _PyUnicode_ToDigit(ch)
|
#define Py_UNICODE_TODIGIT(ch) _PyUnicode_ToDigit(ch)
|
||||||
|
@ -1503,10 +1499,6 @@ PyAPI_FUNC(int) _PyUnicode_IsNumeric(
|
||||||
Py_UNICODE ch /* Unicode character */
|
Py_UNICODE ch /* Unicode character */
|
||||||
);
|
);
|
||||||
|
|
||||||
PyAPI_FUNC(int) _PyUnicode_IsPrintable(
|
|
||||||
Py_UNICODE ch /* Unicode character */
|
|
||||||
);
|
|
||||||
|
|
||||||
PyAPI_FUNC(int) _PyUnicode_IsAlpha(
|
PyAPI_FUNC(int) _PyUnicode_IsAlpha(
|
||||||
Py_UNICODE ch /* Unicode character */
|
Py_UNICODE ch /* Unicode character */
|
||||||
);
|
);
|
||||||
|
|
|
@ -1441,13 +1441,6 @@ class OutputChecker:
|
||||||
and returns true if they match; and `output_difference`, which
|
and returns true if they match; and `output_difference`, which
|
||||||
returns a string describing the differences between two outputs.
|
returns a string describing the differences between two outputs.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def _toAscii(self, s):
|
|
||||||
"""
|
|
||||||
Convert string to hex-escaped ASCII string.
|
|
||||||
"""
|
|
||||||
return str(s.encode('ASCII', 'backslashreplace'), "ASCII")
|
|
||||||
|
|
||||||
def check_output(self, want, got, optionflags):
|
def check_output(self, want, got, optionflags):
|
||||||
"""
|
"""
|
||||||
Return True iff the actual output from an example (`got`)
|
Return True iff the actual output from an example (`got`)
|
||||||
|
@ -1458,15 +1451,6 @@ class OutputChecker:
|
||||||
documentation for `TestRunner` for more information about
|
documentation for `TestRunner` for more information about
|
||||||
option flags.
|
option flags.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# If `want` contains hex-escaped character such as "\u1234",
|
|
||||||
# then `want` is a string of six characters(e.g. [\,u,1,2,3,4]).
|
|
||||||
# On the other hand, `got` could be an another sequence of
|
|
||||||
# characters such as [\u1234], so `want` and `got` should
|
|
||||||
# be folded to hex-escaped ASCII string to compare.
|
|
||||||
got = self._toAscii(got)
|
|
||||||
want = self._toAscii(want)
|
|
||||||
|
|
||||||
# Handle the common case first, for efficiency:
|
# Handle the common case first, for efficiency:
|
||||||
# if they're string-identical, always return true.
|
# if they're string-identical, always return true.
|
||||||
if got == want:
|
if got == want:
|
||||||
|
|
|
@ -768,7 +768,7 @@ class UnicodeTest(StringTest):
|
||||||
a = array.array('u', s)
|
a = array.array('u', s)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
repr(a),
|
repr(a),
|
||||||
"array('u', '\\x00=\"\\'a\\\\b\\x80\xff\\x00\\x01\u1234')")
|
"array('u', '\\x00=\"\\'a\\\\b\\x80\\xff\\x00\\x01\\u1234')")
|
||||||
|
|
||||||
self.assertRaises(TypeError, a.fromunicode)
|
self.assertRaises(TypeError, a.fromunicode)
|
||||||
|
|
||||||
|
|
|
@ -159,9 +159,6 @@ class BuiltinTest(unittest.TestCase):
|
||||||
S = [10, 20, 30]
|
S = [10, 20, 30]
|
||||||
self.assertEqual(any(x > 42 for x in S), False)
|
self.assertEqual(any(x > 42 for x in S), False)
|
||||||
|
|
||||||
def test_ascii(self):
|
|
||||||
self.assertEqual(ascii("\u0370"), "'\\u0370'")
|
|
||||||
|
|
||||||
def test_neg(self):
|
def test_neg(self):
|
||||||
x = -sys.maxsize-1
|
x = -sys.maxsize-1
|
||||||
self.assert_(isinstance(x, int))
|
self.assert_(isinstance(x, int))
|
||||||
|
|
|
@ -80,10 +80,10 @@ class ExceptionTests(unittest.TestCase):
|
||||||
self.raise_catch(IndentationError, "IndentationError")
|
self.raise_catch(IndentationError, "IndentationError")
|
||||||
|
|
||||||
self.raise_catch(TabError, "TabError")
|
self.raise_catch(TabError, "TabError")
|
||||||
try: compile("try:\n\t1/0\n \t1/0\nfinally:\n pass\n",
|
# can only be tested under -tt, and is the only test for -tt
|
||||||
'<string>', 'exec')
|
#try: compile("try:\n\t1/0\n \t1/0\nfinally:\n pass\n", '<string>', 'exec')
|
||||||
except TabError: pass
|
#except TabError: pass
|
||||||
else: self.fail("TabError not raised")
|
#else: self.fail("TabError not raised")
|
||||||
|
|
||||||
self.raise_catch(SystemError, "SystemError")
|
self.raise_catch(SystemError, "SystemError")
|
||||||
|
|
||||||
|
|
|
@ -216,8 +216,6 @@ class FormatTest(unittest.TestCase):
|
||||||
testformat("%o", 0o42, "42")
|
testformat("%o", 0o42, "42")
|
||||||
testformat("%o", -0o42, "-42")
|
testformat("%o", -0o42, "-42")
|
||||||
testformat("%o", float(0o42), "42")
|
testformat("%o", float(0o42), "42")
|
||||||
testformat("%r", "\u0370", "'\u0370'")
|
|
||||||
testformat("%a", "\u0370", "'\\u0370'")
|
|
||||||
# Test exception for unknown format characters
|
# Test exception for unknown format characters
|
||||||
if verbose:
|
if verbose:
|
||||||
print('Testing exceptions')
|
print('Testing exceptions')
|
||||||
|
@ -237,8 +235,8 @@ class FormatTest(unittest.TestCase):
|
||||||
raise
|
raise
|
||||||
else:
|
else:
|
||||||
raise TestFailed('did not get expected exception: %s' % excmsg)
|
raise TestFailed('did not get expected exception: %s' % excmsg)
|
||||||
test_exc('abc %b', 1, ValueError,
|
test_exc('abc %a', 1, ValueError,
|
||||||
"unsupported format character 'b' (0x62) at index 5")
|
"unsupported format character 'a' (0x61) at index 5")
|
||||||
#test_exc(unicode('abc %\u3000','raw-unicode-escape'), 1, ValueError,
|
#test_exc(unicode('abc %\u3000','raw-unicode-escape'), 1, ValueError,
|
||||||
# "unsupported format character '?' (0x3000) at index 5")
|
# "unsupported format character '?' (0x3000) at index 5")
|
||||||
test_exc('%d', '1', TypeError, "%d format: a number is required, not str")
|
test_exc('%d', '1', TypeError, "%d format: a number is required, not str")
|
||||||
|
|
|
@ -131,7 +131,7 @@ class ParseTest(unittest.TestCase):
|
||||||
self.assertEquals(op[1], "Comment: ' comment data '")
|
self.assertEquals(op[1], "Comment: ' comment data '")
|
||||||
self.assertEquals(op[2], "Notation declared: ('notation', None, 'notation.jpeg', None)")
|
self.assertEquals(op[2], "Notation declared: ('notation', None, 'notation.jpeg', None)")
|
||||||
self.assertEquals(op[3], "Unparsed entity decl: ('unparsed_entity', None, 'entity.file', None, 'notation')")
|
self.assertEquals(op[3], "Unparsed entity decl: ('unparsed_entity', None, 'entity.file', None, 'notation')")
|
||||||
self.assertEquals(op[4], "Start element: 'root' {'attr1': 'value1', 'attr2': 'value2\u1f40'}")
|
self.assertEquals(op[4], "Start element: 'root' {'attr1': 'value1', 'attr2': 'value2\\u1f40'}")
|
||||||
self.assertEquals(op[5], "NS decl: 'myns' 'http://www.python.org/namespace'")
|
self.assertEquals(op[5], "NS decl: 'myns' 'http://www.python.org/namespace'")
|
||||||
self.assertEquals(op[6], "Start element: 'http://www.python.org/namespace!subelement' {}")
|
self.assertEquals(op[6], "Start element: 'http://www.python.org/namespace!subelement' {}")
|
||||||
self.assertEquals(op[7], "Character data: 'Contents of subelements'")
|
self.assertEquals(op[7], "Character data: 'Contents of subelements'")
|
||||||
|
|
|
@ -94,14 +94,14 @@ class UnicodeTest(
|
||||||
"JKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f"
|
"JKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f"
|
||||||
"\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d"
|
"\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d"
|
||||||
"\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b"
|
"\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b"
|
||||||
"\\x9c\\x9d\\x9e\\x9f\\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9"
|
"\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9"
|
||||||
"\xaa\xab\xac\\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
|
"\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7"
|
||||||
"\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5"
|
"\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5"
|
||||||
"\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3"
|
"\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3"
|
||||||
"\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1"
|
"\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1"
|
||||||
"\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
|
"\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef"
|
||||||
"\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd"
|
"\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd"
|
||||||
"\xfe\xff'")
|
"\\xfe\\xff'")
|
||||||
testrepr = repr(''.join(map(chr, range(256))))
|
testrepr = repr(''.join(map(chr, range(256))))
|
||||||
self.assertEqual(testrepr, latin1repr)
|
self.assertEqual(testrepr, latin1repr)
|
||||||
# Test repr works on wide unicode escapes without overflow.
|
# Test repr works on wide unicode escapes without overflow.
|
||||||
|
@ -374,12 +374,6 @@ class UnicodeTest(
|
||||||
self.assertFalse("[".isidentifier())
|
self.assertFalse("[".isidentifier())
|
||||||
self.assertFalse("©".isidentifier())
|
self.assertFalse("©".isidentifier())
|
||||||
|
|
||||||
def test_isprintable(self):
|
|
||||||
self.assertTrue("abcdefg".isprintable())
|
|
||||||
self.assertFalse("abcdefg\n".isprintable())
|
|
||||||
self.assertTrue("\u0370".isprintable())
|
|
||||||
self.assertFalse("\ud800".isprintable())
|
|
||||||
|
|
||||||
def test_contains(self):
|
def test_contains(self):
|
||||||
# Testing Unicode contains method
|
# Testing Unicode contains method
|
||||||
self.assert_('a' in 'abdb')
|
self.assert_('a' in 'abdb')
|
||||||
|
|
|
@ -6,22 +6,22 @@
|
||||||
PYVER="@PYVER@"
|
PYVER="@PYVER@"
|
||||||
FWK="/Library/Frameworks/Python.framework/Versions/@PYVER@"
|
FWK="/Library/Frameworks/Python.framework/Versions/@PYVER@"
|
||||||
|
|
||||||
"${FWK}/bin/python" -Wi \
|
"${FWK}/bin/python" -Wi -tt \
|
||||||
"${FWK}/lib/python${PYVER}/compileall.py" \
|
"${FWK}/lib/python${PYVER}/compileall.py" \
|
||||||
-x badsyntax -x site-packages \
|
-x badsyntax -x site-packages \
|
||||||
"${FWK}/lib/python${PYVER}"
|
"${FWK}/lib/python${PYVER}"
|
||||||
|
|
||||||
"${FWK}/bin/python" -Wi -O \
|
"${FWK}/bin/python" -Wi -tt -O \
|
||||||
"${FWK}/lib/python${PYVER}/compileall.py" \
|
"${FWK}/lib/python${PYVER}/compileall.py" \
|
||||||
-x badsyntax -x site-packages \
|
-x badsyntax -x site-packages \
|
||||||
"${FWK}/lib/python${PYVER}"
|
"${FWK}/lib/python${PYVER}"
|
||||||
|
|
||||||
"${FWK}/bin/python" -Wi \
|
"${FWK}/bin/python" -Wi -tt \
|
||||||
"${FWK}/lib/python${PYVER}/compileall.py" \
|
"${FWK}/lib/python${PYVER}/compileall.py" \
|
||||||
-x badsyntax -x site-packages \
|
-x badsyntax -x site-packages \
|
||||||
"${FWK}/Mac/Tools"
|
"${FWK}/Mac/Tools"
|
||||||
|
|
||||||
"${FWK}/bin/python" -Wi -O \
|
"${FWK}/bin/python" -Wi -tt -O \
|
||||||
"${FWK}/lib/python${PYVER}/compileall.py" \
|
"${FWK}/lib/python${PYVER}/compileall.py" \
|
||||||
-x badsyntax -x site-packages \
|
-x badsyntax -x site-packages \
|
||||||
"${FWK}/Mac/Tools"
|
"${FWK}/Mac/Tools"
|
||||||
|
|
|
@ -226,8 +226,8 @@ installmacsubtree:
|
||||||
|
|
||||||
|
|
||||||
$(RUNSHARED) $(BUILDPYTHON) $(CACHERSRC) -v $(DESTDIR)$(MACLIBDEST) $(DESTDIR)$(MACTOOLSDEST)
|
$(RUNSHARED) $(BUILDPYTHON) $(CACHERSRC) -v $(DESTDIR)$(MACLIBDEST) $(DESTDIR)$(MACTOOLSDEST)
|
||||||
$(RUNSHARED) $(BUILDPYTHON) -Wi $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
|
$(RUNSHARED) $(BUILDPYTHON) -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
|
||||||
$(RUNSHARED) $(BUILDPYTHON) -O -Wi $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
|
$(RUNSHARED) $(BUILDPYTHON) -O -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST)
|
||||||
|
|
||||||
$(INSTALLED_PYTHONAPP): install_Python
|
$(INSTALLED_PYTHONAPP): install_Python
|
||||||
|
|
||||||
|
|
|
@ -664,7 +664,7 @@ $(LIBRARY_OBJS) $(MODOBJS) Modules/python.o: $(PYTHON_HEADERS)
|
||||||
|
|
||||||
TESTOPTS= -l $(EXTRATESTOPTS)
|
TESTOPTS= -l $(EXTRATESTOPTS)
|
||||||
TESTPROG= $(srcdir)/Lib/test/regrtest.py
|
TESTPROG= $(srcdir)/Lib/test/regrtest.py
|
||||||
TESTPYTHON= $(RUNSHARED) ./$(BUILDPYTHON) -E -bb
|
TESTPYTHON= $(RUNSHARED) ./$(BUILDPYTHON) -E -tt -bb
|
||||||
test: all platform
|
test: all platform
|
||||||
-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
|
-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
|
||||||
-$(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
|
-$(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
|
||||||
|
@ -687,7 +687,7 @@ testuniversal: all platform
|
||||||
-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
|
-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
|
||||||
-$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) -uall
|
-$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) -uall
|
||||||
$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) -uall
|
$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) -uall
|
||||||
$(RUNSHARED) /usr/libexec/oah/translate ./$(BUILDPYTHON) -E $(TESTPROG) $(TESTOPTS) -uall
|
$(RUNSHARED) /usr/libexec/oah/translate ./$(BUILDPYTHON) -E -tt $(TESTPROG) $(TESTOPTS) -uall
|
||||||
|
|
||||||
|
|
||||||
# Like testall, but with a single pass only
|
# Like testall, but with a single pass only
|
||||||
|
@ -872,23 +872,23 @@ libinstall: build_all $(srcdir)/Lib/$(PLATDIR)
|
||||||
done
|
done
|
||||||
$(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
|
$(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
|
||||||
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
|
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
|
||||||
./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
|
./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
|
||||||
-d $(LIBDEST) -f \
|
-d $(LIBDEST) -f \
|
||||||
-x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
|
-x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
|
||||||
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
|
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
|
||||||
./$(BUILDPYTHON) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
|
./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
|
||||||
-d $(LIBDEST) -f \
|
-d $(LIBDEST) -f \
|
||||||
-x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
|
-x 'bad_coding|badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
|
||||||
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
|
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
|
||||||
./$(BUILDPYTHON) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
|
./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
|
||||||
-d $(LIBDEST)/site-packages -f \
|
-d $(LIBDEST)/site-packages -f \
|
||||||
-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
|
-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
|
||||||
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
|
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
|
||||||
./$(BUILDPYTHON) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
|
./$(BUILDPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
|
||||||
-d $(LIBDEST)/site-packages -f \
|
-d $(LIBDEST)/site-packages -f \
|
||||||
-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
|
-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
|
||||||
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
|
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
|
||||||
./$(BUILDPYTHON) -Wi -c "import lib2to3.pygram"
|
./$(BUILDPYTHON) -Wi -t -c "import lib2to3.pygram"
|
||||||
|
|
||||||
# Create the PLATDIR source directory, if one wasn't distributed..
|
# Create the PLATDIR source directory, if one wasn't distributed..
|
||||||
$(srcdir)/Lib/$(PLATDIR):
|
$(srcdir)/Lib/$(PLATDIR):
|
||||||
|
|
|
@ -12,8 +12,6 @@ What's new in Python 3.0b1?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
- Removed the already-defunct ``-t`` option.
|
|
||||||
|
|
||||||
- Issue #2957: Corrected a ValueError "recursion limit exceeded", when
|
- Issue #2957: Corrected a ValueError "recursion limit exceeded", when
|
||||||
unmarshalling many code objects, which happens when importing a
|
unmarshalling many code objects, which happens when importing a
|
||||||
large .pyc file (~1000 functions).
|
large .pyc file (~1000 functions).
|
||||||
|
|
|
@ -59,7 +59,7 @@ RSYNC_OPTS="-aC -e ssh"
|
||||||
PYTHON=$INSTALL_DIR/bin/python
|
PYTHON=$INSTALL_DIR/bin/python
|
||||||
|
|
||||||
# Python options and regression test program that should always be run.
|
# Python options and regression test program that should always be run.
|
||||||
REGRTEST_ARGS="-E $INSTALL_DIR/lib/python3.0/test/regrtest.py"
|
REGRTEST_ARGS="-E -tt $INSTALL_DIR/lib/python3.0/test/regrtest.py"
|
||||||
|
|
||||||
REFLOG="build/reflog.txt.out"
|
REFLOG="build/reflog.txt.out"
|
||||||
# These tests are not stable and falsely report leaks sometimes.
|
# These tests are not stable and falsely report leaks sometimes.
|
||||||
|
|
|
@ -46,6 +46,7 @@ Option Effect
|
||||||
-OO remove doc-strings in addition to the -O optimizations
|
-OO remove doc-strings in addition to the -O optimizations
|
||||||
-Q arg division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew
|
-Q arg division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew
|
||||||
-S Don't perform 'import site' on initialization
|
-S Don't perform 'import site' on initialization
|
||||||
|
-t Issue warnings about inconsistent tab usage (-tt: issue errors)
|
||||||
-u Unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x).
|
-u Unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x).
|
||||||
-v Verbose (trace import statements) (also PYTHONVERBOSE=x)
|
-v Verbose (trace import statements) (also PYTHONVERBOSE=x)
|
||||||
-W arg : warning control (arg is action:message:category:module:lineno)
|
-W arg : warning control (arg is action:message:category:module:lineno)
|
||||||
|
|
|
@ -35,6 +35,9 @@ python \- an interpreted, interactive, object-oriented programming language
|
||||||
.B \-S
|
.B \-S
|
||||||
]
|
]
|
||||||
[
|
[
|
||||||
|
.B \-t
|
||||||
|
]
|
||||||
|
[
|
||||||
.B \-u
|
.B \-u
|
||||||
]
|
]
|
||||||
.br
|
.br
|
||||||
|
@ -141,6 +144,11 @@ and the site-dependent manipulations of
|
||||||
.I sys.path
|
.I sys.path
|
||||||
that it entails.
|
that it entails.
|
||||||
.TP
|
.TP
|
||||||
|
.B \-t
|
||||||
|
Issue a warning when a source file mixes tabs and spaces for
|
||||||
|
indentation in a way that makes it depend on the worth of a tab
|
||||||
|
expressed in spaces. Issue an error when the option is given twice.
|
||||||
|
.TP
|
||||||
.B \-u
|
.B \-u
|
||||||
Force stdin, stdout and stderr to be totally unbuffered. On systems
|
Force stdin, stdout and stderr to be totally unbuffered. On systems
|
||||||
where it matters, also put stdin, stdout and stderr in binary mode.
|
where it matters, also put stdin, stdout and stderr in binary mode.
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#
|
#
|
||||||
# cd python/dist/src
|
# cd python/dist/src
|
||||||
# valgrind --tool=memcheck --suppressions=Misc/valgrind-python.supp \
|
# valgrind --tool=memcheck --suppressions=Misc/valgrind-python.supp \
|
||||||
# ./python -E ./Lib/test/regrtest.py -u bsddb,network
|
# ./python -E -tt ./Lib/test/regrtest.py -u bsddb,network
|
||||||
#
|
#
|
||||||
# You must edit Objects/obmalloc.c and uncomment Py_USING_MEMORY_DEBUGGER
|
# You must edit Objects/obmalloc.c and uncomment Py_USING_MEMORY_DEBUGGER
|
||||||
# to use the preferred suppressions with Py_ADDRESS_IN_RANGE.
|
# to use the preferred suppressions with Py_ADDRESS_IN_RANGE.
|
||||||
|
|
|
@ -72,6 +72,7 @@ static char *usage_2 = "\
|
||||||
-OO : remove doc-strings in addition to the -O optimizations\n\
|
-OO : remove doc-strings in addition to the -O optimizations\n\
|
||||||
-s : don't add user site directory to sys.path; also PYTHONNOUSERSITE\n\
|
-s : don't add user site directory to sys.path; also PYTHONNOUSERSITE\n\
|
||||||
-S : don't imply 'import site' on initialization\n\
|
-S : don't imply 'import site' on initialization\n\
|
||||||
|
-t : issue warnings about inconsistent tab usage (-tt: issue errors)\n\
|
||||||
";
|
";
|
||||||
static char *usage_3 = "\
|
static char *usage_3 = "\
|
||||||
-u : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x\n\
|
-u : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x\n\
|
||||||
|
@ -369,7 +370,7 @@ Py_Main(int argc, wchar_t **argv)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 't':
|
case 't':
|
||||||
/* ignored for backwards compatibility */
|
Py_TabcheckFlag++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'u':
|
case 'u':
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
#define UPPER_MASK 0x80
|
#define UPPER_MASK 0x80
|
||||||
#define XID_START_MASK 0x100
|
#define XID_START_MASK 0x100
|
||||||
#define XID_CONTINUE_MASK 0x200
|
#define XID_CONTINUE_MASK 0x200
|
||||||
#define NONPRINTABLE_MASK 0x400
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const Py_UNICODE upper;
|
const Py_UNICODE upper;
|
||||||
|
@ -676,26 +675,6 @@ int _PyUnicode_IsNumeric(Py_UNICODE ch)
|
||||||
return _PyUnicode_ToNumeric(ch) != -1.0;
|
return _PyUnicode_ToNumeric(ch) != -1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns 1 for Unicode characters to be hex-escaped when repr()ed,
|
|
||||||
0 otherwise.
|
|
||||||
Characters defined in the Unicode character database as following
|
|
||||||
categories are not considered printable.
|
|
||||||
* Cc (Other, Control)
|
|
||||||
* Cf (Other, Format)
|
|
||||||
* Cs (Other, Surrogate)
|
|
||||||
* Co (Other, Private Use)
|
|
||||||
* Cn (Other, Not Assigned)
|
|
||||||
* Zl Separator, Line ('\u2028', LINE SEPARATOR)
|
|
||||||
* Zp Separator, Paragraph ('\u2029', PARAGRAPH SEPARATOR)
|
|
||||||
* Zs (Separator, Space) other than ASCII space('\x20').
|
|
||||||
*/
|
|
||||||
int _PyUnicode_IsPrintable(Py_UNICODE ch)
|
|
||||||
{
|
|
||||||
const _PyUnicode_TypeRecord *ctype = gettyperecord(ch);
|
|
||||||
|
|
||||||
return (ctype->flags & NONPRINTABLE_MASK) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef WANT_WCTYPE_FUNCTIONS
|
#ifndef WANT_WCTYPE_FUNCTIONS
|
||||||
|
|
||||||
/* Returns 1 for Unicode characters having the bidirectional type
|
/* Returns 1 for Unicode characters having the bidirectional type
|
||||||
|
|
|
@ -7149,36 +7149,6 @@ unicode_isidentifier(PyObject *self)
|
||||||
return PyBool_FromLong(PyUnicode_IsIdentifier(self));
|
return PyBool_FromLong(PyUnicode_IsIdentifier(self));
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(isprintable__doc__,
|
|
||||||
"S.isprintable() -> bool\n\
|
|
||||||
\n\
|
|
||||||
Return True if all characters in S are considered\n\
|
|
||||||
printable in repr() and there is at least one character\n\
|
|
||||||
in S, False otherwise.");
|
|
||||||
|
|
||||||
static PyObject*
|
|
||||||
unicode_isprintable(PyObject *self)
|
|
||||||
{
|
|
||||||
register const Py_UNICODE *p = PyUnicode_AS_UNICODE(self);
|
|
||||||
register const Py_UNICODE *e;
|
|
||||||
|
|
||||||
/* Shortcut for single character strings */
|
|
||||||
if (PyUnicode_GET_SIZE(self) == 1 &&
|
|
||||||
Py_UNICODE_ISPRINTABLE(*p))
|
|
||||||
return PyBool_FromLong(1);
|
|
||||||
|
|
||||||
/* Special case for empty strings */
|
|
||||||
if (PyUnicode_GET_SIZE(self) == 0)
|
|
||||||
return PyBool_FromLong(0);
|
|
||||||
|
|
||||||
e = p + PyUnicode_GET_SIZE(self);
|
|
||||||
for (; p < e; p++) {
|
|
||||||
if (!Py_UNICODE_ISPRINTABLE(*p))
|
|
||||||
return PyBool_FromLong(0);
|
|
||||||
}
|
|
||||||
return PyBool_FromLong(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
PyDoc_STRVAR(join__doc__,
|
PyDoc_STRVAR(join__doc__,
|
||||||
"S.join(sequence) -> str\n\
|
"S.join(sequence) -> str\n\
|
||||||
\n\
|
\n\
|
||||||
|
@ -7556,8 +7526,61 @@ PyObject *unicode_repr(PyObject *unicode)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Map special whitespace to '\t', \n', '\r' */
|
#ifdef Py_UNICODE_WIDE
|
||||||
if (ch == '\t') {
|
/* Map 21-bit characters to '\U00xxxxxx' */
|
||||||
|
else if (ch >= 0x10000) {
|
||||||
|
*p++ = '\\';
|
||||||
|
*p++ = 'U';
|
||||||
|
*p++ = hexdigits[(ch >> 28) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[(ch >> 24) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[(ch >> 20) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[(ch >> 16) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[(ch >> 12) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[(ch >> 8) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[(ch >> 4) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[ch & 0x0000000F];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* Map UTF-16 surrogate pairs to '\U00xxxxxx' */
|
||||||
|
else if (ch >= 0xD800 && ch < 0xDC00) {
|
||||||
|
Py_UNICODE ch2;
|
||||||
|
Py_UCS4 ucs;
|
||||||
|
|
||||||
|
ch2 = *s++;
|
||||||
|
size--;
|
||||||
|
if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {
|
||||||
|
ucs = (((ch & 0x03FF) << 10) | (ch2 & 0x03FF)) + 0x00010000;
|
||||||
|
*p++ = '\\';
|
||||||
|
*p++ = 'U';
|
||||||
|
*p++ = hexdigits[(ucs >> 28) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[(ucs >> 24) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[(ucs >> 20) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[(ucs >> 16) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[(ucs >> 12) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[(ucs >> 8) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[(ucs >> 4) & 0x0000000F];
|
||||||
|
*p++ = hexdigits[ucs & 0x0000000F];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/* Fall through: isolated surrogates are copied as-is */
|
||||||
|
s--;
|
||||||
|
size++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Map 16-bit characters to '\uxxxx' */
|
||||||
|
if (ch >= 256) {
|
||||||
|
*p++ = '\\';
|
||||||
|
*p++ = 'u';
|
||||||
|
*p++ = hexdigits[(ch >> 12) & 0x000F];
|
||||||
|
*p++ = hexdigits[(ch >> 8) & 0x000F];
|
||||||
|
*p++ = hexdigits[(ch >> 4) & 0x000F];
|
||||||
|
*p++ = hexdigits[ch & 0x000F];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Map special whitespace to '\t', \n', '\r' */
|
||||||
|
else if (ch == '\t') {
|
||||||
*p++ = '\\';
|
*p++ = '\\';
|
||||||
*p++ = 't';
|
*p++ = 't';
|
||||||
}
|
}
|
||||||
|
@ -7571,79 +7594,16 @@ PyObject *unicode_repr(PyObject *unicode)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Map non-printable US ASCII to '\xhh' */
|
/* Map non-printable US ASCII to '\xhh' */
|
||||||
else if (ch < ' ' || ch == 0x7F) {
|
else if (ch < ' ' || ch >= 0x7F) {
|
||||||
*p++ = '\\';
|
*p++ = '\\';
|
||||||
*p++ = 'x';
|
*p++ = 'x';
|
||||||
*p++ = hexdigits[(ch >> 4) & 0x000F];
|
*p++ = hexdigits[(ch >> 4) & 0x000F];
|
||||||
*p++ = hexdigits[ch & 0x000F];
|
*p++ = hexdigits[ch & 0x000F];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy ASCII characters as-is */
|
/* Copy everything else as-is */
|
||||||
else if (ch < 0x7F) {
|
else
|
||||||
*p++ = ch;
|
*p++ = (char) ch;
|
||||||
}
|
|
||||||
|
|
||||||
/* Non-ASCII characters */
|
|
||||||
else {
|
|
||||||
Py_UCS4 ucs = ch;
|
|
||||||
|
|
||||||
#ifndef Py_UNICODE_WIDE
|
|
||||||
Py_UNICODE ch2 = 0;
|
|
||||||
/* Get code point from surrogate pair */
|
|
||||||
if (size > 0) {
|
|
||||||
ch2 = *s;
|
|
||||||
if (ch >= 0xD800 && ch < 0xDC00 && ch2 >= 0xDC00
|
|
||||||
&& ch2 <= 0xDFFF) {
|
|
||||||
ucs = (((ch & 0x03FF) << 10) | (ch2 & 0x03FF))
|
|
||||||
+ 0x00010000;
|
|
||||||
s++;
|
|
||||||
size--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/* Map Unicode whitespace and control characters
|
|
||||||
(categories Z* and C* except ASCII space)
|
|
||||||
*/
|
|
||||||
if (!Py_UNICODE_ISPRINTABLE(ucs)) {
|
|
||||||
/* Map 8-bit characters to '\xhh' */
|
|
||||||
if (ucs <= 0xff) {
|
|
||||||
*p++ = '\\';
|
|
||||||
*p++ = 'x';
|
|
||||||
*p++ = hexdigits[(ch >> 4) & 0x000F];
|
|
||||||
*p++ = hexdigits[ch & 0x000F];
|
|
||||||
}
|
|
||||||
/* Map 21-bit characters to '\U00xxxxxx' */
|
|
||||||
else if (ucs >= 0x10000) {
|
|
||||||
*p++ = '\\';
|
|
||||||
*p++ = 'U';
|
|
||||||
*p++ = hexdigits[(ucs >> 28) & 0x0000000F];
|
|
||||||
*p++ = hexdigits[(ucs >> 24) & 0x0000000F];
|
|
||||||
*p++ = hexdigits[(ucs >> 20) & 0x0000000F];
|
|
||||||
*p++ = hexdigits[(ucs >> 16) & 0x0000000F];
|
|
||||||
*p++ = hexdigits[(ucs >> 12) & 0x0000000F];
|
|
||||||
*p++ = hexdigits[(ucs >> 8) & 0x0000000F];
|
|
||||||
*p++ = hexdigits[(ucs >> 4) & 0x0000000F];
|
|
||||||
*p++ = hexdigits[ucs & 0x0000000F];
|
|
||||||
}
|
|
||||||
/* Map 16-bit characters to '\uxxxx' */
|
|
||||||
else {
|
|
||||||
*p++ = '\\';
|
|
||||||
*p++ = 'u';
|
|
||||||
*p++ = hexdigits[(ucs >> 12) & 0x000F];
|
|
||||||
*p++ = hexdigits[(ucs >> 8) & 0x000F];
|
|
||||||
*p++ = hexdigits[(ucs >> 4) & 0x000F];
|
|
||||||
*p++ = hexdigits[ucs & 0x000F];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Copy characters as-is */
|
|
||||||
else {
|
|
||||||
*p++ = ch;
|
|
||||||
#ifndef Py_UNICODE_WIDE
|
|
||||||
if (ucs >= 0x10000)
|
|
||||||
*p++ = ch2;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* Add quote */
|
/* Add quote */
|
||||||
*p++ = PyUnicode_AS_UNICODE(repr)[0];
|
*p++ = PyUnicode_AS_UNICODE(repr)[0];
|
||||||
|
@ -8308,7 +8268,6 @@ static PyMethodDef unicode_methods[] = {
|
||||||
{"isalpha", (PyCFunction) unicode_isalpha, METH_NOARGS, isalpha__doc__},
|
{"isalpha", (PyCFunction) unicode_isalpha, METH_NOARGS, isalpha__doc__},
|
||||||
{"isalnum", (PyCFunction) unicode_isalnum, METH_NOARGS, isalnum__doc__},
|
{"isalnum", (PyCFunction) unicode_isalnum, METH_NOARGS, isalnum__doc__},
|
||||||
{"isidentifier", (PyCFunction) unicode_isidentifier, METH_NOARGS, isidentifier__doc__},
|
{"isidentifier", (PyCFunction) unicode_isidentifier, METH_NOARGS, isidentifier__doc__},
|
||||||
{"isprintable", (PyCFunction) unicode_isprintable, METH_NOARGS, isprintable__doc__},
|
|
||||||
{"zfill", (PyCFunction) unicode_zfill, METH_VARARGS, zfill__doc__},
|
{"zfill", (PyCFunction) unicode_zfill, METH_VARARGS, zfill__doc__},
|
||||||
{"format", (PyCFunction) do_string_format, METH_VARARGS | METH_KEYWORDS, format__doc__},
|
{"format", (PyCFunction) do_string_format, METH_VARARGS | METH_KEYWORDS, format__doc__},
|
||||||
{"__format__", (PyCFunction) unicode__format__, METH_VARARGS, p_format__doc__},
|
{"__format__", (PyCFunction) unicode__format__, METH_VARARGS, p_format__doc__},
|
||||||
|
@ -8894,7 +8853,6 @@ PyObject *PyUnicode_Format(PyObject *format,
|
||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
case 'r':
|
case 'r':
|
||||||
case 'a':
|
|
||||||
if (PyUnicode_Check(v) && c == 's') {
|
if (PyUnicode_Check(v) && c == 's') {
|
||||||
temp = v;
|
temp = v;
|
||||||
Py_INCREF(temp);
|
Py_INCREF(temp);
|
||||||
|
@ -8914,22 +8872,6 @@ PyObject *PyUnicode_Format(PyObject *format,
|
||||||
"%s argument has non-string str()");
|
"%s argument has non-string str()");
|
||||||
goto onError;
|
goto onError;
|
||||||
}
|
}
|
||||||
if (c == 'a') {
|
|
||||||
PyObject *ascii = PyUnicode_EncodeASCII(
|
|
||||||
PyUnicode_AS_UNICODE(temp),
|
|
||||||
PyUnicode_GET_SIZE(temp),
|
|
||||||
"backslashreplace");
|
|
||||||
|
|
||||||
Py_DECREF(temp);
|
|
||||||
if (ascii == NULL)
|
|
||||||
goto onError;
|
|
||||||
|
|
||||||
temp = PyUnicode_FromEncodedObject(ascii,
|
|
||||||
"ASCII", NULL);
|
|
||||||
Py_DECREF(ascii);
|
|
||||||
if (temp == NULL)
|
|
||||||
goto onError;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
pbuf = PyUnicode_AS_UNICODE(temp);
|
pbuf = PyUnicode_AS_UNICODE(temp);
|
||||||
len = PyUnicode_GET_SIZE(temp);
|
len = PyUnicode_GET_SIZE(temp);
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -31,11 +31,11 @@
|
||||||
@if "%_qmode%"=="yes" goto Qmode
|
@if "%_qmode%"=="yes" goto Qmode
|
||||||
@echo Deleting .pyc/.pyo files ...
|
@echo Deleting .pyc/.pyo files ...
|
||||||
@%_exe% rmpyc.py
|
@%_exe% rmpyc.py
|
||||||
%_exe% %_dashO% -E ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
|
%_exe% %_dashO% -E -tt ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||||
@echo About to run again without deleting .pyc/.pyo first:
|
@echo About to run again without deleting .pyc/.pyo first:
|
||||||
@pause
|
@pause
|
||||||
:Qmode
|
:Qmode
|
||||||
%_exe% %_dashO% -E ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
|
%_exe% %_dashO% -E -tt ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||||
@set _exe=
|
@set _exe=
|
||||||
@set _qmode=
|
@set _qmode=
|
||||||
@set _dashO=
|
@set _dashO=
|
||||||
|
|
|
@ -34,7 +34,7 @@ if "%1"=="-O" (set dashO=-O) & shift & goto CheckOpts
|
||||||
if "%1"=="-q" (set qmode=yes) & shift & goto CheckOpts
|
if "%1"=="-q" (set qmode=yes) & shift & goto CheckOpts
|
||||||
if "%1"=="-d" (set exe=python_d) & shift & goto CheckOpts
|
if "%1"=="-d" (set exe=python_d) & shift & goto CheckOpts
|
||||||
|
|
||||||
set cmd=%exe% %dashO% -E ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
|
set cmd=%exe% %dashO% -E -tt ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||||
if defined qmode goto Qmode
|
if defined qmode goto Qmode
|
||||||
|
|
||||||
echo Deleting .pyc/.pyo files ...
|
echo Deleting .pyc/.pyo files ...
|
||||||
|
|
|
@ -34,7 +34,7 @@ if "%1"=="-O" (set dashO=-O) & shift & goto CheckOpts
|
||||||
if "%1"=="-q" (set qmode=yes) & shift & goto CheckOpts
|
if "%1"=="-q" (set qmode=yes) & shift & goto CheckOpts
|
||||||
if "%1"=="-d" (set exe=python_d) & shift & goto CheckOpts
|
if "%1"=="-d" (set exe=python_d) & shift & goto CheckOpts
|
||||||
|
|
||||||
set cmd=%exe% %dashO% -E ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
|
set cmd=%exe% %dashO% -E -tt ../../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||||
if defined qmode goto Qmode
|
if defined qmode goto Qmode
|
||||||
|
|
||||||
echo Deleting .pyc/.pyo files ...
|
echo Deleting .pyc/.pyo files ...
|
||||||
|
|
|
@ -666,7 +666,7 @@ _ssl$(MODULE.EXT): $(OUT)_ssl$O $(OUT)_ssl_m.def $(PYTHON.IMPLIB)
|
||||||
# the test target
|
# the test target
|
||||||
test:
|
test:
|
||||||
-find ../../Lib -name "*.py[co]" -exec rm {} ";"
|
-find ../../Lib -name "*.py[co]" -exec rm {} ";"
|
||||||
-./python -E ../../lib/test/regrtest.py -l -u "network"
|
-./python -E -tt ../../lib/test/regrtest.py -l -u "network"
|
||||||
./python -E ../../lib/test/regrtest.py -l -u "network"
|
./python -E -tt ../../lib/test/regrtest.py -l -u "network"
|
||||||
|
|
||||||
-include $(OUTBASE)python.dep
|
-include $(OUTBASE)python.dep
|
||||||
|
|
|
@ -49,6 +49,7 @@ EXPORTS
|
||||||
"PyParser_Delete"
|
"PyParser_Delete"
|
||||||
|
|
||||||
; From python26_s.lib(parsetok)
|
; From python26_s.lib(parsetok)
|
||||||
|
"Py_TabcheckFlag"
|
||||||
"PyParser_ParseString"
|
"PyParser_ParseString"
|
||||||
"PyParser_ParseStringFlagsFilename"
|
"PyParser_ParseStringFlagsFilename"
|
||||||
"PyParser_ParseFile"
|
"PyParser_ParseFile"
|
||||||
|
|
|
@ -61,6 +61,7 @@ EXPORTS
|
||||||
Py_InteractiveFlag
|
Py_InteractiveFlag
|
||||||
Py_NoSiteFlag
|
Py_NoSiteFlag
|
||||||
Py_OptimizeFlag
|
Py_OptimizeFlag
|
||||||
|
Py_TabcheckFlag
|
||||||
Py_UseClassExceptionsFlag
|
Py_UseClassExceptionsFlag
|
||||||
Py_VerboseFlag
|
Py_VerboseFlag
|
||||||
_PyImport_Filetab
|
_PyImport_Filetab
|
||||||
|
|
|
@ -40,7 +40,7 @@ if "%1"=="-x64" (set prefix=amd64) & (set tcltk=tcltk64) & shift & goto CheckOpt
|
||||||
|
|
||||||
PATH %PATH%;..\..\%tcltk%\bin
|
PATH %PATH%;..\..\%tcltk%\bin
|
||||||
set exe=%prefix%\python%suffix%
|
set exe=%prefix%\python%suffix%
|
||||||
set cmd=%exe% %dashO% -E ../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
|
set cmd=%exe% %dashO% -E -tt ../lib/test/regrtest.py %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||||
if defined qmode goto Qmode
|
if defined qmode goto Qmode
|
||||||
|
|
||||||
echo Deleting .pyc/.pyo files ...
|
echo Deleting .pyc/.pyo files ...
|
||||||
|
|
|
@ -10,6 +10,8 @@
|
||||||
#include "errcode.h"
|
#include "errcode.h"
|
||||||
#include "graminit.h"
|
#include "graminit.h"
|
||||||
|
|
||||||
|
int Py_TabcheckFlag;
|
||||||
|
|
||||||
|
|
||||||
/* Forward */
|
/* Forward */
|
||||||
static node *parsetok(struct tok_state *, grammar *, int, perrdetail *, int *);
|
static node *parsetok(struct tok_state *, grammar *, int, perrdetail *, int *);
|
||||||
|
@ -55,6 +57,9 @@ PyParser_ParseStringFlagsFilenameEx(const char *s, const char *filename,
|
||||||
}
|
}
|
||||||
|
|
||||||
tok->filename = filename ? filename : "<string>";
|
tok->filename = filename ? filename : "<string>";
|
||||||
|
if (Py_TabcheckFlag >= 3)
|
||||||
|
tok->alterror = 0;
|
||||||
|
|
||||||
return parsetok(tok, g, start, err_ret, flags);
|
return parsetok(tok, g, start, err_ret, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,6 +97,9 @@ PyParser_ParseFileFlagsEx(FILE *fp, const char *filename,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
tok->filename = filename;
|
tok->filename = filename;
|
||||||
|
if (Py_TabcheckFlag >= 3)
|
||||||
|
tok->alterror = 0;
|
||||||
|
|
||||||
return parsetok(tok, g, start, err_ret, flags);
|
return parsetok(tok, g, start, err_ret, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -265,38 +265,6 @@ PyDoc_STRVAR(any_doc,
|
||||||
\n\
|
\n\
|
||||||
Return True if bool(x) is True for any x in the iterable.");
|
Return True if bool(x) is True for any x in the iterable.");
|
||||||
|
|
||||||
static PyObject *
|
|
||||||
builtin_ascii(PyObject *self, PyObject *v)
|
|
||||||
{
|
|
||||||
PyObject *repr, *bytes, *ascii;
|
|
||||||
repr = PyObject_Repr(v);
|
|
||||||
if (!repr)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
bytes = PyUnicode_EncodeASCII(
|
|
||||||
PyUnicode_AS_UNICODE(repr),
|
|
||||||
PyUnicode_GET_SIZE(repr),
|
|
||||||
"backslashreplace");
|
|
||||||
|
|
||||||
Py_DECREF(repr);
|
|
||||||
if (bytes == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
ascii = PyUnicode_FromEncodedObject(bytes,
|
|
||||||
"ASCII", NULL);
|
|
||||||
Py_DECREF(bytes);
|
|
||||||
if (ascii == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
return ascii;
|
|
||||||
}
|
|
||||||
|
|
||||||
PyDoc_STRVAR(ascii_doc,
|
|
||||||
"ascii(object) -> string\n\
|
|
||||||
\n\
|
|
||||||
Return the canonical string representation of the object as repr(),\n\
|
|
||||||
but non-ASCII characters in the string are hex-escaped");
|
|
||||||
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
builtin_bin(PyObject *self, PyObject *v)
|
builtin_bin(PyObject *self, PyObject *v)
|
||||||
|
@ -2220,7 +2188,6 @@ static PyMethodDef builtin_methods[] = {
|
||||||
{"abs", builtin_abs, METH_O, abs_doc},
|
{"abs", builtin_abs, METH_O, abs_doc},
|
||||||
{"all", builtin_all, METH_O, all_doc},
|
{"all", builtin_all, METH_O, all_doc},
|
||||||
{"any", builtin_any, METH_O, any_doc},
|
{"any", builtin_any, METH_O, any_doc},
|
||||||
{"ascii", builtin_ascii, METH_O, ascii_doc},
|
|
||||||
{"bin", builtin_bin, METH_O, bin_doc},
|
{"bin", builtin_bin, METH_O, bin_doc},
|
||||||
{"chr", builtin_chr, METH_VARARGS, chr_doc},
|
{"chr", builtin_chr, METH_VARARGS, chr_doc},
|
||||||
{"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
|
{"cmp", builtin_cmp, METH_VARARGS, cmp_doc},
|
||||||
|
|
|
@ -1100,6 +1100,7 @@ static PyStructSequence_Field flags_fields[] = {
|
||||||
{"no_user_site", "-s"},
|
{"no_user_site", "-s"},
|
||||||
{"no_site", "-S"},
|
{"no_site", "-S"},
|
||||||
{"ignore_environment", "-E"},
|
{"ignore_environment", "-E"},
|
||||||
|
{"tabcheck", "-t or -tt"},
|
||||||
{"verbose", "-v"},
|
{"verbose", "-v"},
|
||||||
#ifdef RISCOS
|
#ifdef RISCOS
|
||||||
{"riscos_wimp", "???"},
|
{"riscos_wimp", "???"},
|
||||||
|
@ -1115,9 +1116,9 @@ static PyStructSequence_Desc flags_desc = {
|
||||||
flags__doc__, /* doc */
|
flags__doc__, /* doc */
|
||||||
flags_fields, /* fields */
|
flags_fields, /* fields */
|
||||||
#ifdef RISCOS
|
#ifdef RISCOS
|
||||||
11
|
12
|
||||||
#else
|
#else
|
||||||
10
|
11
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1143,6 +1144,7 @@ make_flags(void)
|
||||||
SetFlag(Py_NoUserSiteDirectory);
|
SetFlag(Py_NoUserSiteDirectory);
|
||||||
SetFlag(Py_NoSiteFlag);
|
SetFlag(Py_NoSiteFlag);
|
||||||
SetFlag(Py_IgnoreEnvironmentFlag);
|
SetFlag(Py_IgnoreEnvironmentFlag);
|
||||||
|
SetFlag(Py_TabcheckFlag);
|
||||||
SetFlag(Py_VerboseFlag);
|
SetFlag(Py_VerboseFlag);
|
||||||
#ifdef RISCOS
|
#ifdef RISCOS
|
||||||
SetFlag(Py_RISCOSWimpFlag);
|
SetFlag(Py_RISCOSWimpFlag);
|
||||||
|
|
|
@ -60,7 +60,6 @@ TITLE_MASK = 0x40
|
||||||
UPPER_MASK = 0x80
|
UPPER_MASK = 0x80
|
||||||
XID_START_MASK = 0x100
|
XID_START_MASK = 0x100
|
||||||
XID_CONTINUE_MASK = 0x200
|
XID_CONTINUE_MASK = 0x200
|
||||||
NONPRINTABLE_MASK = 0x400
|
|
||||||
|
|
||||||
def maketables(trace=0):
|
def maketables(trace=0):
|
||||||
|
|
||||||
|
@ -72,7 +71,7 @@ def maketables(trace=0):
|
||||||
EASTASIAN_WIDTH % version,
|
EASTASIAN_WIDTH % version,
|
||||||
DERIVED_CORE_PROPERTIES % version)
|
DERIVED_CORE_PROPERTIES % version)
|
||||||
|
|
||||||
print(len(list(filter(None, unicode.table))), "characters")
|
print(len(filter(None, unicode.table)), "characters")
|
||||||
|
|
||||||
for version in old_versions:
|
for version in old_versions:
|
||||||
print("--- Reading", UNICODE_DATA % ("-"+version), "...")
|
print("--- Reading", UNICODE_DATA % ("-"+version), "...")
|
||||||
|
@ -80,7 +79,7 @@ def maketables(trace=0):
|
||||||
COMPOSITION_EXCLUSIONS % ("-"+version),
|
COMPOSITION_EXCLUSIONS % ("-"+version),
|
||||||
EASTASIAN_WIDTH % ("-"+version),
|
EASTASIAN_WIDTH % ("-"+version),
|
||||||
DERIVED_CORE_PROPERTIES % ("-"+version))
|
DERIVED_CORE_PROPERTIES % ("-"+version))
|
||||||
print(len(list(filter(None, old_unicode.table))), "characters")
|
print(len(filter(None, old_unicode.table)), "characters")
|
||||||
merge_old_version(version, unicode, old_unicode)
|
merge_old_version(version, unicode, old_unicode)
|
||||||
|
|
||||||
makeunicodename(unicode, trace)
|
makeunicodename(unicode, trace)
|
||||||
|
@ -372,10 +371,6 @@ def makeunicodetype(unicode, trace):
|
||||||
flags |= TITLE_MASK
|
flags |= TITLE_MASK
|
||||||
if category == "Lu":
|
if category == "Lu":
|
||||||
flags |= UPPER_MASK
|
flags |= UPPER_MASK
|
||||||
if category[0] == "C":
|
|
||||||
flags |= NONPRINTABLE_MASK
|
|
||||||
if category[0] == "Z" and char != " ":
|
|
||||||
flags |= NONPRINTABLE_MASK
|
|
||||||
if "XID_Start" in properties:
|
if "XID_Start" in properties:
|
||||||
flags |= XID_START_MASK
|
flags |= XID_START_MASK
|
||||||
if "XID_Continue" in properties:
|
if "XID_Continue" in properties:
|
||||||
|
@ -470,7 +465,7 @@ def makeunicodename(unicode, trace):
|
||||||
if name and name[0] != "<":
|
if name and name[0] != "<":
|
||||||
names[char] = name + chr(0)
|
names[char] = name + chr(0)
|
||||||
|
|
||||||
print(len(list(n for n in names if n is not None)), "distinct names")
|
print(len(n for n in names if n is not None), "distinct names")
|
||||||
|
|
||||||
# collect unique words from names (note that we differ between
|
# collect unique words from names (note that we differ between
|
||||||
# words inside a sentence, and words ending a sentence. the
|
# words inside a sentence, and words ending a sentence. the
|
||||||
|
|
Loading…
Reference in New Issue