Author: Carl Friedrich Bolz <cfb...@gmx.de>
Branch: 
Changeset: r91364:1d471fdc1963
Date: 2017-05-22 15:30 +0200
http://bitbucket.org/pypy/pypy/changeset/1d471fdc1963/

Log:    fix issue #1877: replace bare Exceptions with AnnotatorError in the
        annotator

diff --git a/rpython/annotator/binaryop.py b/rpython/annotator/binaryop.py
--- a/rpython/annotator/binaryop.py
+++ b/rpython/annotator/binaryop.py
@@ -514,13 +514,13 @@
     ne = eq
 
     def lt((tup1, tup2)):
-        raise Exception("unsupported: (...) < (...)")
+        raise AnnotatorError("unsupported: (...) < (...)")
     def le((tup1, tup2)):
-        raise Exception("unsupported: (...) <= (...)")
+        raise AnnotatorError("unsupported: (...) <= (...)")
     def gt((tup1, tup2)):
-        raise Exception("unsupported: (...) > (...)")
+        raise AnnotatorError("unsupported: (...) > (...)")
     def ge((tup1, tup2)):
-        raise Exception("unsupported: (...) >= (...)")
+        raise AnnotatorError("unsupported: (...) >= (...)")
 
 
 class __extend__(pairtype(SomeDict, SomeDict)):
diff --git a/rpython/annotator/bookkeeper.py b/rpython/annotator/bookkeeper.py
--- a/rpython/annotator/bookkeeper.py
+++ b/rpython/annotator/bookkeeper.py
@@ -15,7 +15,8 @@
     SomeDict, SomeBuiltin, SomePBC, SomeInteger, TLS, SomeUnicodeCodePoint,
     s_None, s_ImpossibleValue, SomeBool, SomeTuple, SomeException,
     SomeImpossibleValue, SomeUnicodeString, SomeList, HarmlesslyBlocked,
-    SomeWeakRef, SomeByteArray, SomeConstantType, SomeProperty)
+    SomeWeakRef, SomeByteArray, SomeConstantType, SomeProperty,
+    AnnotatorError)
 from rpython.annotator.classdesc import ClassDef, ClassDesc
 from rpython.annotator.listdef import ListDef, ListItem
 from rpython.annotator.dictdef import DictDef
@@ -343,7 +344,7 @@
         elif x is None:
             return s_None
         else:
-            raise Exception("Don't know how to represent %r" % (x,))
+            raise AnnotatorError("Don't know how to represent %r" % (x,))
         result.const = x
         return result
 
@@ -363,7 +364,7 @@
                 result = self.newfuncdesc(pyobj)
             elif isinstance(pyobj, (type, types.ClassType)):
                 if pyobj is object:
-                    raise Exception("ClassDesc for object not supported")
+                    raise AnnotatorError("ClassDesc for object not supported")
                 if pyobj.__module__ == '__builtin__': # avoid making classdefs 
for builtin types
                     result = self.getfrozen(pyobj)
                 else:
@@ -400,7 +401,7 @@
                         msg = "object with a __call__ is not RPython"
                     else:
                         msg = "unexpected prebuilt constant"
-                    raise Exception("%s: %r" % (msg, pyobj))
+                    raise AnnotatorError("%s: %r" % (msg, pyobj))
                 result = self.getfrozen(pyobj)
             self.descs[obj_key] = result
             return result
@@ -589,7 +590,7 @@
         for name, value in dict.iteritems():
             if value is func:
                 return cls, name
-    raise Exception("could not match bound-method to attribute name: %r" % 
(boundmeth,))
+    raise AnnotatorError("could not match bound-method to attribute name: %r" 
% (boundmeth,))
 
 def ishashable(x):
     try:
diff --git a/rpython/annotator/classdesc.py b/rpython/annotator/classdesc.py
--- a/rpython/annotator/classdesc.py
+++ b/rpython/annotator/classdesc.py
@@ -550,8 +550,8 @@
                                         "with _mixin_: %r" % (cls,))
                 base = b1
         if mixins_before and mixins_after:
-            raise Exception("unsupported: class %r has mixin bases both"
-                            " before and after the regular base" % (self,))
+            raise AnnotatorError("unsupported: class %r has mixin bases both"
+                                 " before and after the regular base" % 
(self,))
         self.add_mixins(mixins_after, check_not_in=base)
         self.add_mixins(mixins_before)
         self.add_sources_for_class(cls)
@@ -569,8 +569,8 @@
                 attrs.update(decl)
             if self.basedesc is not None:
                 if self.basedesc.all_enforced_attrs is None:
-                    raise Exception("%r has slots or _attrs_, "
-                                    "but not its base class" % (cls,))
+                    raise AnnotatorError("%r has slots or _attrs_, "
+                                         "but not its base class" % (cls,))
                 attrs.update(self.basedesc.all_enforced_attrs)
             self.all_enforced_attrs = attrs
 
@@ -714,8 +714,8 @@
                 try:
                     args.fixedunpack(0)
                 except ValueError:
-                    raise Exception("default __init__ takes no argument"
-                                    " (class %s)" % (self.name,))
+                    raise AnnotatorError("default __init__ takes no argument"
+                                         " (class %s)" % (self.name,))
             elif self.pyobj is Exception:
                 # check explicitly against "raise Exception, x" where x
                 # is a low-level exception pointer
@@ -824,8 +824,8 @@
         # actual copy in the rtyper). Tested in rpython.rtyper.test.test_rlist,
         # test_immutable_list_out_of_instance.
         if self._detect_invalid_attrs and attr in self._detect_invalid_attrs:
-            raise Exception("field %r was migrated to %r from a subclass in "
-                            "which it was declared as _immutable_fields_" %
+            raise AnnotatorError("field %r was migrated to %r from a subclass 
in "
+                                 "which it was declared as _immutable_fields_" 
%
                             (attr, self.pyobj))
         search1 = '%s[*]' % (attr,)
         search2 = '%s?[*]' % (attr,)
@@ -858,7 +858,7 @@
             # call to a single class, look at the result annotation
             # in case it was specialized
             if not isinstance(s_result, SomeInstance):
-                raise Exception("calling a class didn't return an instance??")
+                raise AnnotatorError("calling a class didn't return an 
instance??")
             classdefs = [s_result.classdef]
         else:
             # call to multiple classes: specialization not supported
diff --git a/rpython/annotator/description.py b/rpython/annotator/description.py
--- a/rpython/annotator/description.py
+++ b/rpython/annotator/description.py
@@ -314,8 +314,8 @@
         enforceargs = getattr(self.pyobj, '_annenforceargs_', None)
         signature = getattr(self.pyobj, '_signature_', None)
         if enforceargs and signature:
-            raise Exception("%r: signature and enforceargs cannot both be "
-                            "used" % (self,))
+            raise AnnotatorError("%r: signature and enforceargs cannot both be 
"
+                                 "used" % (self,))
         if enforceargs:
             if not callable(enforceargs):
                 from rpython.annotator.signature import Sig
@@ -432,7 +432,7 @@
     def func_args(self, args):
         from rpython.annotator.model import SomeInstance
         if self.selfclassdef is None:
-            raise Exception("calling %r" % (self,))
+            raise AnnotatorError("calling %r" % (self,))
         s_instance = SomeInstance(self.selfclassdef, flags=self.flags)
         return args.prepend(s_instance)
 
diff --git a/rpython/annotator/test/test_annrpython.py 
b/rpython/annotator/test/test_annrpython.py
--- a/rpython/annotator/test/test_annrpython.py
+++ b/rpython/annotator/test/test_annrpython.py
@@ -4584,7 +4584,7 @@
             return Ellipsis
         a = self.RPythonAnnotator()
         e = py.test.raises(Exception, a.build_types, f, [])
-        assert str(e.value) == "Don't know how to represent Ellipsis"
+        assert "Don't know how to represent Ellipsis" in str(e.value)
 
     def test_must_be_light_finalizer(self):
         from rpython.rlib import rgc
diff --git a/rpython/annotator/unaryop.py b/rpython/annotator/unaryop.py
--- a/rpython/annotator/unaryop.py
+++ b/rpython/annotator/unaryop.py
@@ -185,8 +185,8 @@
         return SomeString()
 
     def id(self):
-        raise Exception("cannot use id() in RPython; "
-                        "see objectmodel.compute_xxx()")
+        raise AnnotatorError("cannot use id() in RPython; "
+                             "see objectmodel.compute_xxx()")
 
     def int(self):
         return SomeInteger()
@@ -421,7 +421,7 @@
     def setslice(self, s_start, s_stop, s_iterable):
         check_negative_slice(s_start, s_stop)
         if not isinstance(s_iterable, SomeList):
-            raise Exception("list[start:stop] = x: x must be a list")
+            raise AnnotatorError("list[start:stop] = x: x must be a list")
         self.listdef.mutate()
         self.listdef.agree(getbookkeeper(), s_iterable.listdef)
         self.listdef.resize()
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to