[pypy-svn] r48885 - in pypy/dist/pypy/module/_codecs: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Wed Nov 21 10:22:35 CET 2007


Author: cfbolz
Date: Wed Nov 21 10:22:35 2007
New Revision: 48885

Modified:
   pypy/dist/pypy/module/_codecs/interp_codecs.py
   pypy/dist/pypy/module/_codecs/test/test_codecs.py
Log:
make the codecs module not segfault anymore


Modified: pypy/dist/pypy/module/_codecs/interp_codecs.py
==============================================================================
--- pypy/dist/pypy/module/_codecs/interp_codecs.py	(original)
+++ pypy/dist/pypy/module/_codecs/interp_codecs.py	Wed Nov 21 10:22:35 2007
@@ -131,7 +131,7 @@
 lookup_error.unwrap_spec = [ObjSpace, str]
 
 
-def encode(space, w_obj, encoding=NoneNotWrapped, errors='strict'):
+def encode(space, w_obj, w_encoding=NoneNotWrapped, errors='strict'):
     """encode(obj, [encoding[,errors]]) -> object
     
     Encodes obj using the codec registered for encoding. encoding defaults
@@ -142,17 +142,19 @@
     codecs.register_error that can handle ValueErrors.
     """
     #import pdb; pdb.set_trace()
-    if encoding is None:
+    if w_encoding is None:
         encoding = space.sys.defaultencoding
+    else:
+        encoding = space.str_w(w_encoding)
     w_encoder = space.getitem(lookup_codec(space, encoding), space.wrap(0))
     if space.is_true(w_encoder):
         w_res = space.call_function(w_encoder, w_obj, space.wrap(errors))
         return space.getitem(w_res, space.wrap(0))
     else:
         assert 0, "XXX, what to do here?"
-encode.unwrap_spec = [ObjSpace, W_Root, str, str]
+encode.unwrap_spec = [ObjSpace, W_Root, W_Root, str]
 
-def decode(space, w_obj, encoding=NoneNotWrapped, errors='strict'):
+def decode(space, w_obj, w_encoding=NoneNotWrapped, errors='strict'):
     """decode(obj, [encoding[,errors]]) -> object
 
     Decodes obj using the codec registered for encoding. encoding defaults
@@ -162,8 +164,10 @@
     as well as any other name registerd with codecs.register_error that is
     able to handle ValueErrors.
     """
-    if encoding is None:
+    if w_encoding is None:
         encoding = space.sys.defaultencoding
+    else:
+        encoding = space.str_w(w_encoding)
     w_decoder = space.getitem(lookup_codec(space, encoding), space.wrap(1))
     if space.is_true(w_decoder):
         w_res = space.call_function(w_decoder, w_obj, space.wrap(errors))
@@ -175,7 +179,7 @@
         return space.getitem(w_res, space.wrap(0))
     else:
         assert 0, "XXX, what to do here?"
-decode.unwrap_spec = [ObjSpace, W_Root, str, str]
+decode.unwrap_spec = [ObjSpace, W_Root, W_Root, str]
 
 def register_error(space, errors, w_handler):
     """register_error(errors, handler)

Modified: pypy/dist/pypy/module/_codecs/test/test_codecs.py
==============================================================================
--- pypy/dist/pypy/module/_codecs/test/test_codecs.py	(original)
+++ pypy/dist/pypy/module/_codecs/test/test_codecs.py	Wed Nov 21 10:22:35 2007
@@ -278,3 +278,16 @@
         _codecs.register(search_function)
         raises(TypeError, "hello".decode, "test.mytestenc")
         raises(TypeError, u"hello".encode, "test.mytestenc")
+
+    def test_cpytest_decode(self):
+        import codecs
+        print 1
+        assert codecs.decode('\xe4\xf6\xfc', 'latin-1') == u'\xe4\xf6\xfc'
+        print 2
+        raises(TypeError, codecs.decode)
+        print 3
+        assert codecs.decode('abc') == u'abc'
+        print 4
+        raises(UnicodeDecodeError, codecs.decode, '\xff', 'ascii')
+
+



More information about the Pypy-commit mailing list