[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