[pypy-commit] pypy default: Pretend there is '_attrs_=[]' on most built-in exceptions classes.
arigo
noreply at buildbot.pypy.org
Sun Aug 12 17:31:02 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r56710:b3460afafb24
Date: 2012-08-12 17:20 +0200
http://bitbucket.org/pypy/pypy/changeset/b3460afafb24/
Log: Pretend there is '_attrs_=[]' on most built-in exceptions classes.
diff --git a/pypy/annotation/description.py b/pypy/annotation/description.py
--- a/pypy/annotation/description.py
+++ b/pypy/annotation/description.py
@@ -450,6 +450,12 @@
attrs.update(self.basedesc.all_enforced_attrs)
self.all_enforced_attrs = attrs
+ if (self.is_builtin_exception_class() and
+ self.all_enforced_attrs is None):
+ from pypy.annotation import classdef
+ if self.pyobj not in classdef.FORCE_ATTRIBUTES_INTO_CLASSES:
+ self.all_enforced_attrs = [] # no attribute allowed
+
def add_source_attribute(self, name, value, mixin=False):
if isinstance(value, types.FunctionType):
# for debugging
diff --git a/pypy/annotation/test/test_annrpython.py b/pypy/annotation/test/test_annrpython.py
--- a/pypy/annotation/test/test_annrpython.py
+++ b/pypy/annotation/test/test_annrpython.py
@@ -3841,6 +3841,14 @@
assert len(a.translator.graphs) == 3 # fn, __iter__, next
assert isinstance(s, annmodel.SomeInteger)
+ def test_no_attr_on_common_exception_classes(self):
+ for cls in [ValueError, Exception]:
+ def fn():
+ e = cls()
+ e.foo = "bar"
+ a = self.RPythonAnnotator()
+ py.test.raises(Exception, a.build_types, fn, [])
+
def g(n):
return [0,1,2,n]
More information about the pypy-commit
mailing list