[pypy-svn] r16183 - pypy/dist/pypy/objspace/std

arigo at codespeak.net arigo at codespeak.net
Sat Aug 20 14:28:06 CEST 2005


Author: arigo
Date: Sat Aug 20 14:28:04 2005
New Revision: 16183

Modified:
   pypy/dist/pypy/objspace/std/unicodeobject.py
Log:
Can't use str() on unicode chars, nor comparison between non-unicode and
unicode characters.

Fix for unicode characters \u0100 and \U000010000.


Modified: pypy/dist/pypy/objspace/std/unicodeobject.py
==============================================================================
--- pypy/dist/pypy/objspace/std/unicodeobject.py	(original)
+++ pypy/dist/pypy/objspace/std/unicodeobject.py	Sat Aug 20 14:28:04 2005
@@ -904,11 +904,6 @@
     result[1] = quote
     i = 2
     for ch in chars:
-        if ch == u'\\' or ch == str(quote) :
-            result[i] =  '\\'
-            result[i + 1] = str(ch)
-            i += 2
-            continue
 ##        if ch == u"'":
 ##            quote ='''"'''
 ##            result[1] = quote
@@ -917,7 +912,7 @@
 ##            i += 1
 ##            continue
         code = ord(ch)
-        if code > 0x10000:
+        if code >= 0x10000:
             # Resize if needed
             if i + 12 > len(result):
                 result.extend(['\0'] * 100)
@@ -933,7 +928,7 @@
             result[i + 9] = hexdigits[(code >>  0) & 0xf]
             i += 10
             continue
-        if code > 0x100:
+        if code >= 0x100:
             result[i] = '\\'
             result[i + 1] = "u"
             result[i + 2] = hexdigits[(code >> 12) & 0xf] 
@@ -942,6 +937,11 @@
             result[i + 5] = hexdigits[(code >>  0) & 0xf] 
             i += 6
             continue
+        if code == ord('\\') or code == ord(quote):
+            result[i] = '\\'
+            result[i + 1] = chr(code)
+            i += 2
+            continue
         if code == ord('\t'):
             result[i] = '\\'
             result[i + 1] = "t"



More information about the Pypy-commit mailing list