Author: Ronan Lamy <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit