[Python-checkins] r60052 - in python/trunk: Lib/test/test_string.py Lib/tokenize.py Misc/NEWS Parser/tokenizer.c Python/ast.c Python/bltinmodule.c

christian.heimes python-checkins at python.org
Fri Jan 18 19:24:08 CET 2008


Author: christian.heimes
Date: Fri Jan 18 19:24:07 2008
New Revision: 60052

Modified:
   python/trunk/Lib/test/test_string.py
   python/trunk/Lib/tokenize.py
   python/trunk/Misc/NEWS
   python/trunk/Parser/tokenizer.c
   python/trunk/Python/ast.c
   python/trunk/Python/bltinmodule.c
Log:
Added bytes and b'' as aliases for str and ''

Modified: python/trunk/Lib/test/test_string.py
==============================================================================
--- python/trunk/Lib/test/test_string.py	(original)
+++ python/trunk/Lib/test/test_string.py	Fri Jan 18 19:24:07 2008
@@ -106,8 +106,19 @@
         self.assertEqual(string.capwords('ABC-DEF-GHI', '-'), 'Abc-Def-Ghi')
         self.assertEqual(string.capwords('ABC-def DEF-ghi GHI'), 'Abc-def Def-ghi Ghi')
 
+class BytesAliasTest(unittest.TestCase):
+
+    def test_builtin(self):
+        self.assert_(str is bytes)
+
+    def test_syntax(self):
+        self.assertEqual(b"spam", "spam")
+        self.assertEqual(br"egg\foo", "egg\\foo")
+        self.assert_(type(b""), str)
+        self.assert_(type(br""), str)
+
 def test_main():
-    test_support.run_unittest(StringTest, ModuleTest)
+    test_support.run_unittest(StringTest, ModuleTest, BytesAliasTest)
 
 if __name__ == "__main__":
     test_main()

Modified: python/trunk/Lib/tokenize.py
==============================================================================
--- python/trunk/Lib/tokenize.py	(original)
+++ python/trunk/Lib/tokenize.py	Fri Jan 18 19:24:07 2008
@@ -109,21 +109,34 @@
             "uR'''": single3prog, 'uR"""': double3prog,
             "Ur'''": single3prog, 'Ur"""': double3prog,
             "UR'''": single3prog, 'UR"""': double3prog,
-            'r': None, 'R': None, 'u': None, 'U': None}
+            "b'''": single3prog, 'b"""': double3prog,
+            "br'''": single3prog, 'br"""': double3prog,
+            "B'''": single3prog, 'B"""': double3prog,
+            "bR'''": single3prog, 'bR"""': double3prog,
+            "Br'''": single3prog, 'Br"""': double3prog,
+            "BR'''": single3prog, 'BR"""': double3prog,
+            'r': None, 'R': None, 'u': None, 'U': None,
+            'b': None, 'B': None}
 
 triple_quoted = {}
 for t in ("'''", '"""',
           "r'''", 'r"""', "R'''", 'R"""',
           "u'''", 'u"""', "U'''", 'U"""',
           "ur'''", 'ur"""', "Ur'''", 'Ur"""',
-          "uR'''", 'uR"""', "UR'''", 'UR"""'):
+          "uR'''", 'uR"""', "UR'''", 'UR"""',
+          "b'''", 'b"""', "B'''", 'B"""',
+          "br'''", 'br"""', "Br'''", 'Br"""',
+          "bR'''", 'bR"""', "BR'''", 'BR"""'):
     triple_quoted[t] = t
 single_quoted = {}
 for t in ("'", '"',
           "r'", 'r"', "R'", 'R"',
           "u'", 'u"', "U'", 'U"',
           "ur'", 'ur"', "Ur'", 'Ur"',
-          "uR'", 'uR"', "UR'", 'UR"' ):
+          "uR'", 'uR"', "UR'", 'UR"',
+          "b'", 'b"', "B'", 'B"',
+          "br'", 'br"', "Br'", 'Br"',
+          "bR'", 'bR"', "BR'", 'BR"' ):
     single_quoted[t] = t
 
 tabsize = 8

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Fri Jan 18 19:24:07 2008
@@ -12,6 +12,9 @@
 Core and builtins
 -----------------
 
+- Issue #1865: Bytes as an alias for str and b"" as an alias "" were
+  added.
+
 - sys.float_info / PyFloat_GetInfo: The floating point information
   object was converted from a dict to a specialized structseq object.
 

Modified: python/trunk/Parser/tokenizer.c
==============================================================================
--- python/trunk/Parser/tokenizer.c	(original)
+++ python/trunk/Parser/tokenizer.c	Fri Jan 18 19:24:07 2008
@@ -1263,6 +1263,14 @@
 	if (isalpha(c) || c == '_') {
 		/* Process r"", u"" and ur"" */
 		switch (c) {
+		case 'b':
+		case 'B':
+			c = tok_nextc(tok);
+			if (c == 'r' || c == 'R')
+				c = tok_nextc(tok);
+			if (c == '"' || c == '\'')
+				goto letter_quote;
+			break;
 		case 'r':
 		case 'R':
 			c = tok_nextc(tok);

Modified: python/trunk/Python/ast.c
==============================================================================
--- python/trunk/Python/ast.c	(original)
+++ python/trunk/Python/ast.c	Fri Jan 18 19:24:07 2008
@@ -3238,6 +3238,9 @@
                         quote = *++s;
                         unicode = 1;
                 }
+                if (quote == 'b' || quote == 'B') {
+                        quote = *++s;
+                }
                 if (quote == 'r' || quote == 'R') {
                         quote = *++s;
                         rawmode = 1;

Modified: python/trunk/Python/bltinmodule.c
==============================================================================
--- python/trunk/Python/bltinmodule.c	(original)
+++ python/trunk/Python/bltinmodule.c	Fri Jan 18 19:24:07 2008
@@ -2446,6 +2446,7 @@
 	SETBUILTIN("True",		Py_True);
 	SETBUILTIN("basestring",	&PyBaseString_Type);
 	SETBUILTIN("bool",		&PyBool_Type);
+	SETBUILTIN("bytes",		&PyString_Type);
 	SETBUILTIN("buffer",		&PyBuffer_Type);
 	SETBUILTIN("classmethod",	&PyClassMethod_Type);
 #ifndef WITHOUT_COMPLEX


More information about the Python-checkins mailing list