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