Author: Armin Rigo <[email protected]>
Branch:
Changeset: r73313:1a1f484e66a8
Date: 2014-09-05 10:18 +0200
http://bitbucket.org/pypy/pypy/changeset/1a1f484e66a8/
Log: issue #1259
We don't have many prebuilt pure-Python modules, but for the ones
that show up, remove their __file__ rather than translate it
statically inside the executable.
diff --git a/pypy/interpreter/module.py b/pypy/interpreter/module.py
--- a/pypy/interpreter/module.py
+++ b/pypy/interpreter/module.py
@@ -29,6 +29,17 @@
space.w_None)
self.startup_called = False
+ def _cleanup_(self):
+ """Called by the annotator on prebuilt Module instances.
+ We don't have many such modules, but for the ones that
+ show up, remove their __file__ rather than translate it
+ statically inside the executable."""
+ try:
+ space = self.space
+ space.delitem(self.w_dict, space.wrap('__file__'))
+ except OperationError:
+ pass
+
def install(self):
"""NOT_RPYTHON: installs this module into space.builtin_modules"""
w_mod = self.space.wrap(self)
diff --git a/pypy/interpreter/test/test_module.py
b/pypy/interpreter/test/test_module.py
--- a/pypy/interpreter/test/test_module.py
+++ b/pypy/interpreter/test/test_module.py
@@ -1,4 +1,5 @@
-
+import py
+from pypy.interpreter.error import OperationError
from pypy.interpreter.module import Module
class TestModule:
@@ -17,6 +18,18 @@
space.raises_w(space.w_AttributeError,
space.delattr, w_m, w('x'))
+ def test___file__(self, space):
+ w = space.wrap
+ m = Module(space, space.wrap('m'))
+ py.test.raises(OperationError, space.getattr, w(m), w('__file__'))
+ m._cleanup_()
+ py.test.raises(OperationError, space.getattr, w(m), w('__file__'))
+ space.setattr(w(m), w('__file__'), w('m.py'))
+ space.getattr(w(m), w('__file__')) # does not raise
+ m._cleanup_()
+ py.test.raises(OperationError, space.getattr, w(m), w('__file__'))
+
+
class AppTest_ModuleObject:
def test_attr(self):
m = __import__('__builtin__')
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit