From 67ebd9f79d284020cc43eb665a870d96da7d8468 Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Thu, 9 Sep 2010 09:35:14 +0200 Subject: [PATCH] check for non-ASCII bytes literals only in Py3 mode --- Cython/Compiler/Parsing.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Cython/Compiler/Parsing.py b/Cython/Compiler/Parsing.py index 87a8ebf7..8c331b76 100644 --- a/Cython/Compiler/Parsing.py +++ b/Cython/Compiler/Parsing.py @@ -698,6 +698,7 @@ def p_string_literal(s, kind_override=None): # s.sy == 'BEGIN_STRING' pos = s.position() is_raw = 0 + is_python3_source = s.context.language_level >= 3 has_non_ASCII_literal_characters = False kind = s.systring[:1].lower() if kind == 'r': @@ -726,7 +727,7 @@ def p_string_literal(s, kind_override=None): #print "p_string_literal: sy =", sy, repr(s.systring) ### if sy == 'CHARS': chars.append(systr) - if not has_non_ASCII_literal_characters and check_for_non_ascii_characters(systr): + if is_python3_source and not has_non_ASCII_literal_characters and check_for_non_ascii_characters(systr): has_non_ASCII_literal_characters = True elif sy == 'ESCAPE': if is_raw: @@ -738,7 +739,8 @@ def p_string_literal(s, kind_override=None): chars.append(u"'") else: chars.append(systr) - if not has_non_ASCII_literal_characters and check_for_non_ascii_characters(systr): + if is_python3_source and not has_non_ASCII_literal_characters \ + and check_for_non_ascii_characters(systr): has_non_ASCII_literal_characters = True else: c = systr[1] @@ -765,7 +767,8 @@ def p_string_literal(s, kind_override=None): chars.append_uescape(chrval, systr) else: chars.append(u'\\' + systr[1:]) - if not has_non_ASCII_literal_characters and check_for_non_ascii_characters(systr): + if is_python3_source and not has_non_ASCII_literal_characters \ + and check_for_non_ascii_characters(systr): has_non_ASCII_literal_characters = True elif sy == 'NEWLINE': chars.append(u'\n') @@ -784,7 +787,7 @@ def p_string_literal(s, kind_override=None): error(pos, u"invalid character literal: %r" % bytes_value) else: bytes_value, unicode_value = chars.getstrings() - if has_non_ASCII_literal_characters and s.context.language_level >= 3: + if is_python3_source and has_non_ASCII_literal_characters: # Python 3 forbids literal non-ASCII characters in byte strings if kind != 'u': s.error("bytes can only contain ASCII literal characters.", pos = pos) -- 2.26.2