Author: Armin Rigo <ar...@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] _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit