[pypy-commit] pypy ClassRepr: merge ClassRepr and AbstractClassRepr

rlamy noreply at buildbot.pypy.org
Mon Oct 13 01:38:33 CEST 2014


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: ClassRepr
Changeset: r73908:004a045702e9
Date: 2014-10-12 22:29 +0100
http://bitbucket.org/pypy/pypy/changeset/004a045702e9/

Log:	merge ClassRepr and AbstractClassRepr

diff --git a/rpython/rtyper/rclass.py b/rpython/rtyper/rclass.py
--- a/rpython/rtyper/rclass.py
+++ b/rpython/rtyper/rclass.py
@@ -189,13 +189,16 @@
     return rstr.string_repr.convert_const(name)
 
 
-class AbstractClassRepr(Repr):
+class ClassRepr(Repr):
     def __init__(self, rtyper, classdef):
         self.rtyper = rtyper
         self.classdef = classdef
-
-    def _setup_repr(self):
-        pass
+        if classdef is None:
+            # 'object' root type
+            self.vtable_type = OBJECT_VTABLE
+        else:
+            self.vtable_type = lltype.ForwardReference()
+        self.lowleveltype = Ptr(self.vtable_type)
 
     def __repr__(self):
         if self.classdef is None:
@@ -241,17 +244,6 @@
     def get_ll_eq_function(self):
         return None
 
-
-class ClassRepr(AbstractClassRepr):
-    def __init__(self, rtyper, classdef):
-        AbstractClassRepr.__init__(self, rtyper, classdef)
-        if classdef is None:
-            # 'object' root type
-            self.vtable_type = OBJECT_VTABLE
-        else:
-            self.vtable_type = lltype.ForwardReference()
-        self.lowleveltype = Ptr(self.vtable_type)
-
     def _setup_repr(self):
         # NOTE: don't store mutable objects like the dicts below on 'self'
         #       before they are fully built, to avoid strange bugs in case
@@ -298,20 +290,6 @@
         self.allmethods = allmethods
         self.vtable = None
 
-#    def convert_const(self, value):
-#        if not isinstance(value, (type, types.ClassType)):
-#            raise TyperError("not a class: %r" % (value,))
-#        try:
-#            subclassdef = self.rtyper.annotator.getuserclasses()[value]
-#        except KeyError:
-#            raise TyperError("no classdef: %r" % (value,))
-#        if self.classdef is not None:
-#            if self.classdef.commonbase(subclassdef) != self.classdef:
-#                raise TyperError("not a subclass of %r: %r" % (
-#                    self.classdef.cls, value))
-#        #
-#        return getclassrepr(self.rtyper, subclassdef).getvtable()
-
     def getvtable(self, cast_to_typeptr=True):
         """Return a ptr to the vtable of this type."""
         if self.vtable is None:
@@ -364,7 +342,6 @@
                 llvalue = r.convert_desc_or_const(value)
                 setattr(vtable, mangled_name, llvalue)
 
-            mro = list(rsubcls.classdef.getmro())
             for fldname in self.clsfields:
                 mangled_name, r = self.clsfields[fldname]
                 if r.lowleveltype is Void:
diff --git a/rpython/rtyper/rpbc.py b/rpython/rtyper/rpbc.py
--- a/rpython/rtyper/rpbc.py
+++ b/rpython/rtyper/rpbc.py
@@ -763,7 +763,7 @@
     else:
         return cls.hash
 
-class __extend__(pairtype(ClassesPBCRepr, rclass.AbstractClassRepr)):
+class __extend__(pairtype(ClassesPBCRepr, rclass.ClassRepr)):
     def convert_from_to((r_clspbc, r_cls), v, llops):
         # turn a PBC of classes to a standard pointer-to-vtable class repr
         if r_clspbc.lowleveltype == r_cls.lowleveltype:


More information about the pypy-commit mailing list