Author: Amaury Forgeot d'Arc <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit