Kaydet (Commit) 198e3537 authored tarafından Amaury Forgeot d'Arc's avatar Amaury Forgeot d'Arc

Issue2495: tokenize.untokenize did not insert space between two consecutive string literals:

"" "" becomes """", which is invalid code.

Backport of r61979.
üst bfdbfd4d
...@@ -656,4 +656,10 @@ test_tokenize ...@@ -656,4 +656,10 @@ test_tokenize
177,11-177,15: NAME 'pass' 177,11-177,15: NAME 'pass'
177,15-177,16: NEWLINE '\n' 177,15-177,16: NEWLINE '\n'
178,0-178,1: NL '\n' 178,0-178,1: NL '\n'
179,0-179,0: ENDMARKER '' 179,0-179,13: COMMENT '# Issue 2495\n'
180,0-180,1: NAME 'x'
180,2-180,3: OP '='
180,4-180,6: STRING "''"
180,7-180,9: STRING "''"
180,9-180,10: NEWLINE '\n'
181,0-181,0: ENDMARKER ''
...@@ -176,3 +176,5 @@ x = sys.modules['time'].time() ...@@ -176,3 +176,5 @@ x = sys.modules['time'].time()
@staticmethod @staticmethod
def foo(): pass def foo(): pass
# Issue 2495
x = '' ''
...@@ -171,11 +171,12 @@ def untokenize(iterable): ...@@ -171,11 +171,12 @@ def untokenize(iterable):
t1 = [tok[:2] for tok in generate_tokens(f.readline)] t1 = [tok[:2] for tok in generate_tokens(f.readline)]
newcode = untokenize(t1) newcode = untokenize(t1)
readline = iter(newcode.splitlines(1)).next readline = iter(newcode.splitlines(1)).next
t2 = [tok[:2] for tokin generate_tokens(readline)] t2 = [tok[:2] for tok in generate_tokens(readline)]
assert t1 == t2 assert t1 == t2
""" """
startline = False startline = False
prevstring = False
indents = [] indents = []
toks = [] toks = []
toks_append = toks.append toks_append = toks.append
...@@ -185,6 +186,14 @@ def untokenize(iterable): ...@@ -185,6 +186,14 @@ def untokenize(iterable):
if toknum in (NAME, NUMBER): if toknum in (NAME, NUMBER):
tokval += ' ' tokval += ' '
# Insert a space between two consecutive strings
if toknum == STRING:
if prevstring:
tokval = ' ' + tokval
prevstring = True
else:
prevstring = False
if toknum == INDENT: if toknum == INDENT:
indents.append(tokval) indents.append(tokval)
continue continue
......
...@@ -27,6 +27,10 @@ Core and builtins ...@@ -27,6 +27,10 @@ Core and builtins
Library Library
------- -------
- Issue #2495: tokenize.untokenize now inserts a space between two consecutive
string literals; previously, ["" ""] was rendered as [""""], which is
incorrect python code.
- Issue #2482: Make sure that the coefficient of a Decimal is always - Issue #2482: Make sure that the coefficient of a Decimal is always
stored as a str instance, not as a unicode instance. This ensures stored as a str instance, not as a unicode instance. This ensures
that str(Decimal) is always an instance of str. This fixes a that str(Decimal) is always an instance of str. This fixes a
......
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