[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