Author: Philip Jenvey <pjen...@underboss.org>
Branch: 
Changeset: r70125:f15f9a524509
Date: 2014-03-20 10:42 -0700
http://bitbucket.org/pypy/pypy/changeset/f15f9a524509/

Log:    backport 9813b8a36001 from py3k: cache UnsupportedOperation but this
        time to avoid potential module reloading issues

diff --git a/pypy/module/_io/__init__.py b/pypy/module/_io/__init__.py
--- a/pypy/module/_io/__init__.py
+++ b/pypy/module/_io/__init__.py
@@ -8,6 +8,8 @@
     interpleveldefs = {
         'DEFAULT_BUFFER_SIZE': 'space.wrap(interp_iobase.DEFAULT_BUFFER_SIZE)',
         'BlockingIOError': 'interp_io.W_BlockingIOError',
+        'UnsupportedOperation':
+            'space.fromcache(interp_io.Cache).w_unsupportedoperation',
         '_IOBase': 'interp_iobase.W_IOBase',
         '_RawIOBase': 'interp_iobase.W_RawIOBase',
         '_BufferedIOBase': 'interp_bufferedio.W_BufferedIOBase',
@@ -26,16 +28,6 @@
         'IncrementalNewlineDecoder': 
'interp_textio.W_IncrementalNewlineDecoder',
     }
 
-    def init(self, space):
-        MixedModule.init(self, space)
-        w_UnsupportedOperation = space.call_function(
-            space.w_type,
-            space.wrap('UnsupportedOperation'),
-            space.newtuple([space.w_ValueError, space.w_IOError]),
-            space.newdict())
-        space.setattr(self, space.wrap('UnsupportedOperation'),
-                      w_UnsupportedOperation)
-
     def shutdown(self, space):
         # at shutdown, flush all open streams.  Ignore I/O errors.
         from pypy.module._io.interp_iobase import get_autoflusher
diff --git a/pypy/module/_io/interp_io.py b/pypy/module/_io/interp_io.py
--- a/pypy/module/_io/interp_io.py
+++ b/pypy/module/_io/interp_io.py
@@ -10,6 +10,12 @@
 from rpython.rtyper.module.ll_os_stat import STAT_FIELD_TYPES
 
 
+class Cache:
+    def __init__(self, space):
+        self.w_unsupportedoperation = space.new_exception_class(
+            "io.UnsupportedOperation",
+            space.newtuple([space.w_ValueError, space.w_IOError]))
+
 class W_BlockingIOError(W_IOError):
     def __init__(self, space):
         W_IOError.__init__(self, space)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to