[pypy-svn] r75037 - pypy/branch/unfreeze-encodings/pypy/objspace/std
fijal at codespeak.net
fijal at codespeak.net
Thu Jun 3 01:05:52 CEST 2010
Author: fijal
Date: Thu Jun 3 01:05:50 2010
New Revision: 75037
Modified:
pypy/branch/unfreeze-encodings/pypy/objspace/std/unicodetype.py
Log:
A shortcut for decoding common cases
Modified: pypy/branch/unfreeze-encodings/pypy/objspace/std/unicodetype.py
==============================================================================
--- pypy/branch/unfreeze-encodings/pypy/objspace/std/unicodetype.py (original)
+++ pypy/branch/unfreeze-encodings/pypy/objspace/std/unicodetype.py Thu Jun 3 01:05:50 2010
@@ -3,6 +3,7 @@
from pypy.objspace.std.stdtypedef import StdTypeDef, SMM
from pypy.objspace.std.register_all import register_all
from pypy.objspace.std.basestringtype import basestring_typedef
+from pypy.rlib.runicode import str_decode_utf_8, str_decode_ascii
from sys import maxint
@@ -205,9 +206,23 @@
return w_retval
def decode_object(space, w_obj, encoding, errors):
- w_codecs = space.getbuiltinmodule("_codecs")
if encoding is None:
encoding = getdefaultencoding(space)
+ if errors is None or errors == 'strict':
+ try:
+ if encoding == 'ascii':
+ # XXX error handling
+ s = space.bufferstr_w(w_obj)
+ return space.wrap(str_decode_ascii(s, len(s), None)[0])
+ if encoding == 'utf-8':
+ s = space.bufferstr_w(w_obj)
+ return space.wrap(str_decode_utf_8(s, len(s), None)[0])
+ except UnicodeDecodeError, ude:
+ raise OperationError(space.w_UnicodeDecodeError, space.newtuple(
+ [space.wrap(ude.encoding), space.wrap(ude.object),
+ space.wrap(ude.start), space.wrap(ude.end),
+ space.wrap(ude.reason)]))
+ w_codecs = space.getbuiltinmodule("_codecs")
w_decode = space.getattr(w_codecs, space.wrap("decode"))
if errors is None:
w_retval = space.call_function(w_decode, w_obj, space.wrap(encoding))
More information about the Pypy-commit
mailing list