[pypy-svn] r48508 - pypy/branch/unicode-objspace/pypy/objspace/std
cfbolz at codespeak.net
cfbolz at codespeak.net
Sat Nov 10 16:14:08 CET 2007
Author: cfbolz
Date: Sat Nov 10 16:14:06 2007
New Revision: 48508
Modified:
pypy/branch/unicode-objspace/pypy/objspace/std/unicodetype.py
Log:
helper function for unwrapping encoding and error. will be needed in various
places
Modified: pypy/branch/unicode-objspace/pypy/objspace/std/unicodetype.py
==============================================================================
--- pypy/branch/unicode-objspace/pypy/objspace/std/unicodetype.py (original)
+++ pypy/branch/unicode-objspace/pypy/objspace/std/unicodetype.py Sat Nov 10 16:14:06 2007
@@ -197,22 +197,32 @@
return unicode_from_object(space, w_str)
+def _get_encoding_and_errors(space, w_encoding, w_errors):
+ if space.is_w(w_encoding, space.w_None):
+ encoding = None
+ else:
+ encoding = space.str_w(w_encoding)
+ if space.is_w(w_errors, space.w_None):
+ errors = None
+ else:
+ errors = space.str_w(w_errors)
+ return encoding, errors
+
def descr__new__(space, w_unicodetype, w_obj='', w_encoding=None, w_errors=None):
# NB. the default value of w_obj is really a *wrapped* empty string:
# there is gateway magic at work
from pypy.objspace.std.unicodeobject import W_UnicodeObject
w_obj_type = space.type(w_obj)
+ encoding, errors = _get_encoding_and_errors(space, w_encoding, w_errors)
if space.is_w(w_obj_type, space.w_unicode):
- if (not space.is_w(w_encoding, space.w_None) or
- not space.is_w(w_errors, space.w_None)):
+ if encoding is not None or errors is not None:
raise OperationError(space.w_TypeError,
space.wrap('decoding Unicode is not supported'))
if space.is_w(w_unicodetype, space.w_unicode):
return w_obj
w_value = w_obj
- elif (space.is_w(w_encoding, space.w_None) and
- space.is_w(w_errors, space.w_None)):
+ elif encoding is None and errors is None:
if space.is_true(space.isinstance(w_obj, space.w_str)):
w_value = unicode_from_string(space, w_obj)
elif space.is_true(space.isinstance(w_obj, space.w_unicode)):
@@ -220,15 +230,6 @@
else:
w_value = unicode_from_object(space, w_obj)
else:
- if space.is_w(w_encoding, space.w_None):
- encoding = None
- else:
- encoding = space.str_w(w_encoding)
- if space.is_w(w_errors, space.w_None):
- errors = None
- else:
- errors = space.str_w(w_errors)
- errors
w_value = unicode_from_encoded_object(space, w_obj, encoding, errors)
# help the annotator! also the ._value depends on W_UnicodeObject layout
assert isinstance(w_value, W_UnicodeObject)
More information about the Pypy-commit
mailing list