Commit 05533ff0 authored by Mark Florisson's avatar Mark Florisson
parents 49623f86 59921a82
......@@ -6,7 +6,7 @@ import cython
from cython import set
cython.declare(Naming=object, Options=object, PyrexTypes=object, TypeSlots=object,
error=object, warning=object, py_object_type=object, UtilityCode=object,
escape_byte_string=object, EncodedString=object)
EncodedString=object)
import os, time
from PyrexTypes import CPtrType
......@@ -26,7 +26,7 @@ from Errors import error, warning
from PyrexTypes import py_object_type
from Cython.Utils import open_new_file, replace_suffix
from Code import UtilityCode
from StringEncoding import escape_byte_string, EncodedString
from StringEncoding import EncodedString
def check_c_declarations_pxd(module_node):
......
......@@ -766,17 +766,10 @@ def p_string_literal(s, kind_override=None):
has_non_ASCII_literal_characters = True
elif sy == 'ESCAPE':
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)
if is_python3_source and not has_non_ASCII_literal_characters \
and check_for_non_ascii_characters(systr):
has_non_ASCII_literal_characters = True
chars.append(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]
if c in u"01234567":
......
......@@ -232,9 +232,23 @@ def escape_byte_string(s):
append(c)
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.
if len(s) < 2047:
if len(s) < limit:
return s
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