summaryrefslogtreecommitdiff
path: root/coverage/phystokens.py
diff options
context:
space:
mode:
Diffstat (limited to 'coverage/phystokens.py')
-rw-r--r--coverage/phystokens.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/coverage/phystokens.py b/coverage/phystokens.py
index 5e80ed54..a2b23cfc 100644
--- a/coverage/phystokens.py
+++ b/coverage/phystokens.py
@@ -11,7 +11,7 @@ import token
import tokenize
from coverage import env
-from coverage.backward import iternext
+from coverage.backward import iternext, unicode_class
from coverage.misc import contract
@@ -281,7 +281,7 @@ def compile_unicode(source, filename, mode):
"""
source = neuter_encoding_declaration(source)
- if env.PY2 and isinstance(filename, unicode):
+ if env.PY2 and isinstance(filename, unicode_class):
filename = filename.encode(sys.getfilesystemencoding(), "replace")
code = compile(source, filename, mode)
return code
@@ -290,5 +290,9 @@ def compile_unicode(source, filename, mode):
@contract(source='unicode', returns='unicode')
def neuter_encoding_declaration(source):
"""Return `source`, with any encoding declaration neutered."""
- source = COOKIE_RE.sub("# (deleted declaration)", source, count=2)
+ if COOKIE_RE.search(source):
+ source_lines = source.splitlines(True)
+ for lineno in range(min(2, len(source_lines))):
+ source_lines[lineno] = COOKIE_RE.sub("# (deleted declaration)", source_lines[lineno])
+ source = "".join(source_lines)
return source