Author: Ronan Lamy <ronan.l...@gmail.com>
Branch: ClassRepr
Changeset: r73911:7092ede4e639
Date: 2014-10-13 01:40 +0100
http://bitbucket.org/pypy/pypy/changeset/7092ede4e639/

Log:    split off RootClassRepr._setup_repr()

diff --git a/rpython/rtyper/rclass.py b/rpython/rtyper/rclass.py
--- a/rpython/rtyper/rclass.py
+++ b/rpython/rtyper/rclass.py
@@ -251,39 +251,38 @@
         clsfields = {}
         pbcfields = {}
         allmethods = {}
-        if self.classdef is not None:
-            # class attributes
-            llfields = []
-            attrs = self.classdef.attrs.items()
-            attrs.sort()
-            for name, attrdef in attrs:
-                if attrdef.readonly:
-                    s_value = attrdef.s_value
-                    s_unboundmethod = self.prepare_method(s_value)
-                    if s_unboundmethod is not None:
-                        allmethods[name] = True
-                        s_value = s_unboundmethod
-                    r = self.rtyper.getrepr(s_value)
-                    mangled_name = 'cls_' + name
-                    clsfields[name] = mangled_name, r
-                    llfields.append((mangled_name, r.lowleveltype))
-            # attributes showing up in getattrs done on the class as a PBC
-            extra_access_sets = self.rtyper.class_pbc_attributes.get(
-                self.classdef, {})
-            for access_set, (attr, counter) in extra_access_sets.items():
-                r = self.rtyper.getrepr(access_set.s_value)
-                mangled_name = mangle('pbc%d' % counter, attr)
-                pbcfields[access_set, attr] = mangled_name, r
+        # class attributes
+        llfields = []
+        attrs = self.classdef.attrs.items()
+        attrs.sort()
+        for name, attrdef in attrs:
+            if attrdef.readonly:
+                s_value = attrdef.s_value
+                s_unboundmethod = self.prepare_method(s_value)
+                if s_unboundmethod is not None:
+                    allmethods[name] = True
+                    s_value = s_unboundmethod
+                r = self.rtyper.getrepr(s_value)
+                mangled_name = 'cls_' + name
+                clsfields[name] = mangled_name, r
                 llfields.append((mangled_name, r.lowleveltype))
-            #
-            self.rbase = getclassrepr(self.rtyper, self.classdef.basedef)
-            self.rbase.setup()
-            kwds = {'hints': {'immutable': True}}
-            vtable_type = Struct('%s_vtable' % self.classdef.name,
-                                 ('super', self.rbase.vtable_type),
-                                 *llfields, **kwds)
-            self.vtable_type.become(vtable_type)
-            allmethods.update(self.rbase.allmethods)
+        # attributes showing up in getattrs done on the class as a PBC
+        extra_access_sets = self.rtyper.class_pbc_attributes.get(
+            self.classdef, {})
+        for access_set, (attr, counter) in extra_access_sets.items():
+            r = self.rtyper.getrepr(access_set.s_value)
+            mangled_name = mangle('pbc%d' % counter, attr)
+            pbcfields[access_set, attr] = mangled_name, r
+            llfields.append((mangled_name, r.lowleveltype))
+        #
+        self.rbase = getclassrepr(self.rtyper, self.classdef.basedef)
+        self.rbase.setup()
+        kwds = {'hints': {'immutable': True}}
+        vtable_type = Struct('%s_vtable' % self.classdef.name,
+                                ('super', self.rbase.vtable_type),
+                                *llfields, **kwds)
+        self.vtable_type.become(vtable_type)
+        allmethods.update(self.rbase.allmethods)
         self.clsfields = clsfields
         self.pbcfields = pbcfields
         self.allmethods = allmethods
@@ -429,6 +428,12 @@
         self.vtable_type = OBJECT_VTABLE
         self.lowleveltype = Ptr(self.vtable_type)
 
+    def _setup_repr(self):
+        self.clsfields = {}
+        self.pbcfields = {}
+        self.allmethods = {}
+        self.vtable = None
+
 
 def get_type_repr(rtyper):
     return getclassrepr(rtyper, None)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to