Author: Ronan Lamy <ronan.l...@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: _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit