Commit 05533ff0 authored by Mark Florisson's avatar Mark Florisson
parents 49623f86 59921a82
...@@ -6,7 +6,7 @@ import cython ...@@ -6,7 +6,7 @@ import cython
from cython import set from cython import set
cython.declare(Naming=object, Options=object, PyrexTypes=object, TypeSlots=object, cython.declare(Naming=object, Options=object, PyrexTypes=object, TypeSlots=object,
error=object, warning=object, py_object_type=object, UtilityCode=object, error=object, warning=object, py_object_type=object, UtilityCode=object,
escape_byte_string=object, EncodedString=object) EncodedString=object)
import os, time import os, time
from PyrexTypes import CPtrType from PyrexTypes import CPtrType
...@@ -26,7 +26,7 @@ from Errors import error, warning ...@@ -26,7 +26,7 @@ from Errors import error, warning
from PyrexTypes import py_object_type from PyrexTypes import py_object_type
from Cython.Utils import open_new_file, replace_suffix from Cython.Utils import open_new_file, replace_suffix
from Code import UtilityCode from Code import UtilityCode
from StringEncoding import escape_byte_string, EncodedString from StringEncoding import EncodedString
def check_c_declarations_pxd(module_node): def check_c_declarations_pxd(module_node):
......
...@@ -766,13 +766,6 @@ def p_string_literal(s, kind_override=None): ...@@ -766,13 +766,6 @@ def p_string_literal(s, kind_override=None):
has_non_ASCII_literal_characters = True has_non_ASCII_literal_characters = True
elif sy == 'ESCAPE': elif sy == 'ESCAPE':
if is_raw: if is_raw:
if systr == u'\\\n':
chars.append(u'\\\n')
elif systr == u'\\\"':
chars.append(u'"')
elif systr == u'\\\'':
chars.append(u"'")
else:
chars.append(systr) chars.append(systr)
if is_python3_source and not has_non_ASCII_literal_characters \ if is_python3_source and not has_non_ASCII_literal_characters \
and check_for_non_ascii_characters(systr): and check_for_non_ascii_characters(systr):
......
...@@ -232,9 +232,23 @@ def escape_byte_string(s): ...@@ -232,9 +232,23 @@ def escape_byte_string(s):
append(c) append(c)
return join_bytes(l).decode('ISO-8859-1') return join_bytes(l).decode('ISO-8859-1')
def split_string_literal(s): def split_string_literal(s, limit=2000):
# MSVC can't handle long string literals. # MSVC can't handle long string literals.
if len(s) < 2047: if len(s) < limit:
return s return s
else: else:
return '""'.join([s[i:i+2000] for i in range(0, len(s), 2000)]).replace(r'\""', '""\\') start = 0
chunks = []
while start < len(s):
end = start + limit
if len(s) > end-4 and '\\' in s[end-4:end]:
end -= 4 - s[end-4:end].find('\\') # just before the backslash
while s[end-1] == '\\':
end -= 1
if end == start:
# must have been a long line of backslashes
end = start + limit - (limit % 2) - 4
break
chunks.append(s[start:end])
start = end
return '""'.join(chunks)
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment