[pypy-svn] r75658 - pypy/branch/interplevel-codecs/pypy/module/_codecs

afa at codespeak.net afa at codespeak.net
Tue Jun 29 14:59:58 CEST 2010


Author: afa
Date: Tue Jun 29 14:59:57 2010
New Revision: 75658

Modified:
   pypy/branch/interplevel-codecs/pypy/module/_codecs/__init__.py
   pypy/branch/interplevel-codecs/pypy/module/_codecs/app_codecs.py
   pypy/branch/interplevel-codecs/pypy/module/_codecs/interp_codecs.py
Log:
last functions: escape_decode and escape_encode.
Make them use the string parser and repr.


Modified: pypy/branch/interplevel-codecs/pypy/module/_codecs/__init__.py
==============================================================================
--- pypy/branch/interplevel-codecs/pypy/module/_codecs/__init__.py	(original)
+++ pypy/branch/interplevel-codecs/pypy/module/_codecs/__init__.py	Tue Jun 29 14:59:57 2010
@@ -5,9 +5,6 @@
 class Module(MixedModule):
     appleveldefs = {
          '__doc__' :  'app_codecs.__doc__',
-         '__name__' :  'app_codecs.__name__',
-         'escape_decode' :  'app_codecs.escape_decode',
-         'escape_encode' :  'app_codecs.escape_encode',
     }
     interpleveldefs = {
          'encode':         'interp_codecs.encode',
@@ -38,6 +35,8 @@
          'readbuffer_encode': 'interp_codecs.buffer_encode',
          'charmap_decode'   : 'interp_codecs.charmap_decode',
          'charmap_encode'   : 'interp_codecs.charmap_encode',
+         'escape_encode'    : 'interp_codecs.escape_encode',
+         'escape_decode'    : 'interp_codecs.escape_decode',
          'unicode_escape_decode'     :  'interp_codecs.unicode_escape_decode',
          'unicode_escape_encode'     :  'interp_codecs.unicode_escape_encode',
          'raw_unicode_escape_decode' :  'interp_codecs.raw_unicode_escape_decode',

Modified: pypy/branch/interplevel-codecs/pypy/module/_codecs/app_codecs.py
==============================================================================
--- pypy/branch/interplevel-codecs/pypy/module/_codecs/app_codecs.py	(original)
+++ pypy/branch/interplevel-codecs/pypy/module/_codecs/app_codecs.py	Tue Jun 29 14:59:57 2010
@@ -36,60 +36,3 @@
 
 """
 
-def escape_encode( obj, errors='strict'):
-    """None
-    """
-    s = repr(obj)
-    v = s[1:-1]
-    return v, len(v)
-
-# XXX needs error messages when the input is invalid
-def escape_decode(data, errors='strict'):
-    """None
-    """
-    l = len(data)
-    i = 0
-    res = []
-    while i < l:
-        
-        if data[i] == '\\':
-            i += 1
-            if i >= l:
-                raise ValueError("Trailing \\ in string")
-            else:
-                if data[i] == '\\':
-                    res += '\\'
-                elif data[i] == 'n':
-                    res += '\n'
-                elif data[i] == 't':
-                    res += '\t'
-                elif data[i] == 'r':
-                    res += '\r'
-                elif data[i] == 'b':
-                    res += '\b'
-                elif data[i] == '\'':
-                    res += '\''
-                elif data[i] == '\"':
-                    res += '\"'
-                elif data[i] == 'f':
-                    res += '\f'
-                elif data[i] == 'a':
-                    res += '\a'
-                elif data[i] == 'v':
-                    res += '\v'
-                elif '0' <= data[i] <= '9':
-                    # emulate a strange wrap-around behavior of CPython:
-                    # \400 is the same as \000 because 0400 == 256
-                    octal = data[i:i+3]
-                    res += chr(int(octal, 8) & 0xFF)
-                    i += 2
-                elif data[i] == 'x':
-                    hexa = data[i+1:i+3]
-                    res += chr(int(hexa, 16))
-                    i += 2
-        else:
-            res += data[i]
-        i += 1
-    res = ''.join(res)    
-    return res, len(data)
-

Modified: pypy/branch/interplevel-codecs/pypy/module/_codecs/interp_codecs.py
==============================================================================
--- pypy/branch/interplevel-codecs/pypy/module/_codecs/interp_codecs.py	(original)
+++ pypy/branch/interplevel-codecs/pypy/module/_codecs/interp_codecs.py	Tue Jun 29 14:59:57 2010
@@ -396,8 +396,6 @@
     make_decoder_wrapper('mbcs_decode')
 
 def utf_16_ex_decode(space, data, errors='strict', byteorder=0, w_final=False):
-    """None
-    """
     final = space.is_true(w_final)
     state = space.fromcache(CodecState)
     if byteorder == 0:
@@ -606,3 +604,18 @@
         final, state.decode_error_handler)
     return space.newtuple([space.wrap(result), space.wrap(consumed)])
 
+# ____________________________________________________________
+# support for the "string escape" codec
+# This is a bytes-to bytes transformation
+
+ at unwrap_spec(ObjSpace, W_Root, str)
+def escape_encode(space, w_string, errors='strict'):
+    w_repr = space.repr(w_string)
+    w_result = space.getslice(w_repr, space.wrap(1), space.wrap(-1))
+    return space.newtuple([w_result, space.len(w_string)])
+
+ at unwrap_spec(ObjSpace, str, str)
+def escape_decode(space, data, errors='strict'):
+    from pypy.interpreter.pyparser.parsestring import PyString_DecodeEscape
+    result = PyString_DecodeEscape(space, data, False, False)
+    return space.newtuple([space.wrap(result), space.wrap(len(data))])



More information about the Pypy-commit mailing list