[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