Author: Ronan Lamy <ronan.l...@gmail.com>
Branch: 
Changeset: r74312:42c6384b28ee
Date: 2014-10-31 14:38 +0000
http://bitbucket.org/pypy/pypy/changeset/42c6384b28ee/

Log:    ClassDesc is never called with pyobj=None, so make the parameter
        mandatory

diff --git a/rpython/annotator/description.py b/rpython/annotator/description.py
--- a/rpython/annotator/description.py
+++ b/rpython/annotator/description.py
@@ -394,89 +394,86 @@
     settled = False
     _detect_invalid_attrs = None
 
-    def __init__(self, bookkeeper, pyobj=None,
+    def __init__(self, bookkeeper, cls,
                  name=None, basedesc=None, classdict=None,
                  specialize=None):
-        super(ClassDesc, self).__init__(bookkeeper, pyobj)
+        super(ClassDesc, self).__init__(bookkeeper, cls)
 
         if name is None:
-            name = pyobj.__module__ + '.' + pyobj.__name__
+            name = cls.__module__ + '.' + cls.__name__
         self.name = name
         self.basedesc = basedesc
         if classdict is None:
             classdict = {}    # populated below
         self.classdict = classdict     # {attr: Constant-or-Desc}
         if specialize is None:
-            specialize = pyobj.__dict__.get('_annspecialcase_', '')
+            specialize = cls.__dict__.get('_annspecialcase_', '')
         self.specialize = specialize
         self._classdefs = {}
 
-        if pyobj is not None:
-            assert pyobj.__module__ != '__builtin__'
-            cls = pyobj
-            base = object
-            baselist = list(cls.__bases__)
+        assert cls.__module__ != '__builtin__'
+        base = object
+        baselist = list(cls.__bases__)
 
-            if cls.__dict__.get('_mixin_', False):
-                raise AnnotatorError("cannot use directly the class %r because 
"
-                                     "it is a _mixin_" % (cls,))
+        if cls.__dict__.get('_mixin_', False):
+            raise AnnotatorError("cannot use directly the class %r because "
+                                    "it is a _mixin_" % (cls,))
 
-            # special case: skip BaseException in Python 2.5, and pretend
-            # that all exceptions ultimately inherit from Exception instead
-            # of BaseException (XXX hack)
-            if cls is Exception:
-                baselist = []
-            elif baselist == [py.builtin.BaseException]:
-                baselist = [Exception]
+        # special case: skip BaseException in Python 2.5, and pretend
+        # that all exceptions ultimately inherit from Exception instead
+        # of BaseException (XXX hack)
+        if cls is Exception:
+            baselist = []
+        elif baselist == [py.builtin.BaseException]:
+            baselist = [Exception]
 
-            mixins_before = []
-            mixins_after = []
-            for b1 in baselist:
-                if b1 is object:
-                    continue
-                if b1.__dict__.get('_mixin_', False):
-                    if base is object:
-                        mixins_before.append(b1)
-                    else:
-                        mixins_after.append(b1)
+        mixins_before = []
+        mixins_after = []
+        for b1 in baselist:
+            if b1 is object:
+                continue
+            if b1.__dict__.get('_mixin_', False):
+                if base is object:
+                    mixins_before.append(b1)
                 else:
-                    assert base is object, ("multiple inheritance only 
supported "
-                                            "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,))
-            self.add_mixins(mixins_after, check_not_in=base)
-            self.add_mixins(mixins_before)
-            self.add_sources_for_class(cls)
+                    mixins_after.append(b1)
+            else:
+                assert base is object, ("multiple inheritance only supported "
+                                        "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,))
+        self.add_mixins(mixins_after, check_not_in=base)
+        self.add_mixins(mixins_before)
+        self.add_sources_for_class(cls)
 
-            if base is not object:
-                self.basedesc = bookkeeper.getdesc(base)
+        if base is not object:
+            self.basedesc = bookkeeper.getdesc(base)
 
-            if '_settled_' in cls.__dict__:
-                self.settled = bool(cls.__dict__['_settled_'])
+        if '_settled_' in cls.__dict__:
+            self.settled = bool(cls.__dict__['_settled_'])
 
-            if '__slots__' in cls.__dict__ or '_attrs_' in cls.__dict__:
-                attrs = {}
-                for decl in ('__slots__', '_attrs_'):
-                    decl = cls.__dict__.get(decl, [])
-                    if isinstance(decl, str):
-                        decl = (decl,)
-                    decl = dict.fromkeys(decl)
-                    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"
-                                        % (pyobj,))
-                    attrs.update(self.basedesc.all_enforced_attrs)
-                self.all_enforced_attrs = attrs
+        if '__slots__' in cls.__dict__ or '_attrs_' in cls.__dict__:
+            attrs = {}
+            for decl in ('__slots__', '_attrs_'):
+                decl = cls.__dict__.get(decl, [])
+                if isinstance(decl, str):
+                    decl = (decl,)
+                decl = dict.fromkeys(decl)
+                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,))
+                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 rpython.annotator import classdef
-                if self.pyobj not in classdef.FORCE_ATTRIBUTES_INTO_CLASSES:
-                    self.all_enforced_attrs = []    # no attribute allowed
+        if (self.is_builtin_exception_class() and
+            self.all_enforced_attrs is None):
+            from rpython.annotator import classdef
+            if cls 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):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to