[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