[Python-checkins] r61980 - in python/branches/release25-maint: Lib/test/output/test_tokenize Lib/test/tokenize_tests.txt Lib/tokenize.py Misc/NEWS

amaury.forgeotdarc python-checkins at python.org
Fri Mar 28 00:41:59 CET 2008


Author: amaury.forgeotdarc
Date: Fri Mar 28 00:41:59 2008
New Revision: 61980

Modified:
   python/branches/release25-maint/Lib/test/output/test_tokenize
   python/branches/release25-maint/Lib/test/tokenize_tests.txt
   python/branches/release25-maint/Lib/tokenize.py
   python/branches/release25-maint/Misc/NEWS
Log:
Issue2495: tokenize.untokenize did not insert space between two consecutive string literals:
"" "" becomes """", which is invalid code.

Backport of r61979.


Modified: python/branches/release25-maint/Lib/test/output/test_tokenize
==============================================================================
--- python/branches/release25-maint/Lib/test/output/test_tokenize	(original)
+++ python/branches/release25-maint/Lib/test/output/test_tokenize	Fri Mar 28 00:41:59 2008
@@ -656,4 +656,10 @@
 177,11-177,15:	NAME	'pass'
 177,15-177,16:	NEWLINE	'\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	''

Modified: python/branches/release25-maint/Lib/test/tokenize_tests.txt
==============================================================================
--- python/branches/release25-maint/Lib/test/tokenize_tests.txt	(original)
+++ python/branches/release25-maint/Lib/test/tokenize_tests.txt	Fri Mar 28 00:41:59 2008
@@ -176,3 +176,5 @@
 @staticmethod
 def foo(): pass
 
+# Issue 2495
+x = '' ''

Modified: python/branches/release25-maint/Lib/tokenize.py
==============================================================================
--- python/branches/release25-maint/Lib/tokenize.py	(original)
+++ python/branches/release25-maint/Lib/tokenize.py	Fri Mar 28 00:41:59 2008
@@ -171,11 +171,12 @@
         t1 = [tok[:2] for tok in generate_tokens(f.readline)]
         newcode = untokenize(t1)
         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
     """
 
     startline = False
+    prevstring = False
     indents = []
     toks = []
     toks_append = toks.append
@@ -185,6 +186,14 @@
         if toknum in (NAME, NUMBER):
             tokval += ' '
 
+        # Insert a space between two consecutive strings
+        if toknum == STRING:
+            if prevstring:
+                tokval = ' ' + tokval
+            prevstring = True
+        else:
+            prevstring = False
+
         if toknum == INDENT:
             indents.append(tokval)
             continue

Modified: python/branches/release25-maint/Misc/NEWS
==============================================================================
--- python/branches/release25-maint/Misc/NEWS	(original)
+++ python/branches/release25-maint/Misc/NEWS	Fri Mar 28 00:41:59 2008
@@ -27,6 +27,10 @@
 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
   stored as a str instance, not as a unicode instance.  This ensures
   that str(Decimal) is always an instance of str.  This fixes a


More information about the Python-checkins mailing list