Commit 67ee1fff authored by Stefan Behnel's avatar Stefan Behnel

avoid redundant recoding during code comment injection by configuring input codec directly

parent 07e897e9
...@@ -747,8 +747,9 @@ class GlobalState(object): ...@@ -747,8 +747,9 @@ class GlobalState(object):
u'*/', u'*[inserted by cython to avoid comment closer]/' u'*/', u'*[inserted by cython to avoid comment closer]/'
).replace( ).replace(
u'/*', u'/[inserted by cython to avoid comment start]*' u'/*', u'/[inserted by cython to avoid comment start]*'
).encode('ASCII', 'replace').decode('ASCII') )
for line in source_desc.get_lines()] for line in source_desc.get_lines(encoding='ASCII',
error_handling='replace')]
if len(F) == 0: F.append(u'') if len(F) == 0: F.append(u'')
self.input_file_contents[source_desc] = F self.input_file_contents[source_desc] = F
return F return F
......
...@@ -9,6 +9,7 @@ import os ...@@ -9,6 +9,7 @@ import os
import platform import platform
import stat import stat
import sys import sys
import codecs
from time import time from time import time
import cython import cython
...@@ -279,8 +280,12 @@ class FileSourceDescriptor(SourceDescriptor): ...@@ -279,8 +280,12 @@ class FileSourceDescriptor(SourceDescriptor):
self.filename = filename self.filename = filename
self._cmp_name = filename self._cmp_name = filename
def get_lines(self): def get_lines(self, encoding=None, error_handling=None):
if not encoding:
return Utils.open_source_file(self.filename) return Utils.open_source_file(self.filename)
else:
return codecs.open(self.filename, "rU", encoding=encoding,
errors=error_handling)
def get_description(self): def get_description(self):
return self.filename return self.filename
...@@ -307,8 +312,12 @@ class StringSourceDescriptor(SourceDescriptor): ...@@ -307,8 +312,12 @@ class StringSourceDescriptor(SourceDescriptor):
self.codelines = [x + "\n" for x in code.split("\n")] self.codelines = [x + "\n" for x in code.split("\n")]
self._cmp_name = name self._cmp_name = name
def get_lines(self): def get_lines(self, encoding=None, error_handling=None):
if not encoding:
return self.codelines return self.codelines
else:
return [ line.encode(encoding, error_handling).decode(encoding)
for line in self.codelines ]
def get_description(self): def get_description(self):
return self.name return self.name
......
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