Author: Amaury Forgeot d'Arc <amaur...@gmail.com> Branch: py3.3 Changeset: r73593:be8eea97342c Date: 2014-09-17 20:24 +0200 http://bitbucket.org/pypy/pypy/changeset/be8eea97342c/
Log: Python 3.3 acknowledged that sys.defaultencoding is utf-8 and will never change. Simplify encode_object(), this also removes an assertion which prevented module initialization from calling compile() (used by namedtuple for example) diff --git a/pypy/module/sys/__init__.py b/pypy/module/sys/__init__.py --- a/pypy/module/sys/__init__.py +++ b/pypy/module/sys/__init__.py @@ -7,7 +7,7 @@ class Module(MixedModule): """Sys Builtin Module. """ - _immutable_fields_ = ["defaultencoding?", "debug?"] + _immutable_fields_ = ["defaultencoding", "debug?"] def __init__(self, space, w_name): """NOT_RPYTHON""" # because parent __init__ isn't @@ -15,7 +15,6 @@ del self.__class__.interpleveldefs['pypy_getudir'] super(Module, self).__init__(space, w_name) self.recursionlimit = 100 - self.w_default_encoder = None self.defaultencoding = "utf-8" self.filesystemencoding = None self.debug = True @@ -199,16 +198,6 @@ return space.wrap(operror.get_traceback()) return None - def get_w_default_encoder(self): - if self.w_default_encoder is not None: - # XXX is this level of caching ok? CPython has some shortcuts - # for common encodings, but as far as I can see it has no general - # cache. - return self.w_default_encoder - else: - from pypy.module.sys.interp_encoding import get_w_default_encoder - return get_w_default_encoder(self.space) - def get_flag(self, name): space = self.space return space.int_w(space.getattr(self.get('flags'), space.wrap(name))) diff --git a/pypy/module/sys/interp_encoding.py b/pypy/module/sys/interp_encoding.py --- a/pypy/module/sys/interp_encoding.py +++ b/pypy/module/sys/interp_encoding.py @@ -7,17 +7,6 @@ implementation.""" return space.wrap(space.sys.defaultencoding) -def get_w_default_encoder(space): - assert not (space.config.translating and not we_are_translated()), \ - "get_w_default_encoder() should not be called during translation" - w_encoding = space.wrap(space.sys.defaultencoding) - mod = space.getbuiltinmodule("_codecs") - w_lookup = space.getattr(mod, space.wrap("lookup")) - w_functuple = space.call_function(w_lookup, w_encoding) - w_encoder = space.getitem(w_functuple, space.wrap(0)) - space.sys.w_default_encoder = w_encoder # cache it - return w_encoder - if sys.platform == "win32": base_encoding = "mbcs" elif sys.platform == "darwin": diff --git a/pypy/objspace/std/unicodeobject.py b/pypy/objspace/std/unicodeobject.py --- a/pypy/objspace/std/unicodeobject.py +++ b/pypy/objspace/std/unicodeobject.py @@ -481,24 +481,20 @@ def encode_object(space, w_object, encoding, errors): - if encoding is None: - # Get the encoder functions as a wrapped object. - # This lookup is cached. - w_encoder = space.sys.get_w_default_encoder() - else: - if errors is None or errors == 'strict': - if encoding == 'ascii': - u = space.unicode_w(w_object) - eh = unicodehelper.encode_error_handler(space) - return space.wrapbytes(unicode_encode_ascii( - u, len(u), None, errorhandler=eh)) - if encoding == 'utf-8': - u = space.unicode_w(w_object) - eh = unicodehelper.encode_error_handler(space) - return space.wrapbytes(unicode_encode_utf_8( - u, len(u), None, errorhandler=eh)) - from pypy.module._codecs.interp_codecs import lookup_codec - w_encoder = space.getitem(lookup_codec(space, encoding), space.wrap(0)) + if errors is None or errors == 'strict': + if encoding is None or encoding == 'utf-8': + u = space.unicode_w(w_object) + eh = unicodehelper.encode_error_handler(space) + return space.wrapbytes(unicode_encode_utf_8( + u, len(u), errors, errorhandler=eh)) + elif encoding == 'ascii': + u = space.unicode_w(w_object) + eh = unicodehelper.encode_error_handler(space) + return space.wrapbytes(unicode_encode_ascii( + u, len(u), errors, errorhandler=eh)) + + from pypy.module._codecs.interp_codecs import lookup_codec + w_encoder = space.getitem(lookup_codec(space, encoding), space.wrap(0)) if errors is None: w_errors = space.wrap('strict') else: _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit