From 288e89acfc29cf857a8c5d314ba2dd3398a2eae9 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Fri, 18 Jan 2008 18:24:07 +0000 Subject: Added bytes and b'' as aliases for str and '' --- Lib/test/test_string.py | 13 ++++++++++++- Lib/tokenize.py | 19 ++++++++++++++++--- Misc/NEWS | 3 +++ Parser/tokenizer.c | 8 ++++++++ Python/ast.c | 3 +++ Python/bltinmodule.c | 1 + 6 files changed, 43 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_string.py b/Lib/test/test_string.py index fdd431d..9b22333 100644 --- a/Lib/test/test_string.py +++ b/Lib/test/test_string.py @@ -106,8 +106,19 @@ class ModuleTest(unittest.TestCase): 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() diff --git a/Lib/tokenize.py b/Lib/tokenize.py index 5a9d08c..9322e0f 100644 --- a/Lib/tokenize.py +++ b/Lib/tokenize.py @@ -109,21 +109,34 @@ endprogs = {"'": re.compile(Single), '"': re.compile(Double), "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 diff --git a/Misc/NEWS b/Misc/NEWS index 5060b68..cc74e16 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 1? 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. diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index ee353aa..0015dae 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -1263,6 +1263,14 @@ tok_get(register struct tok_state *tok, char **p_start, char **p_end) 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); diff --git a/Python/ast.c b/Python/ast.c index ddcd0a0..aa42fe8 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -3238,6 +3238,9 @@ parsestr(const char *s, const char *encoding) quote = *++s; unicode = 1; } + if (quote == 'b' || quote == 'B') { + quote = *++s; + } if (quote == 'r' || quote == 'R') { quote = *++s; rawmode = 1; diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 3ebd29d..9a31356 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -2446,6 +2446,7 @@ _PyBuiltin_Init(void) 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 -- cgit v0.12