Author: Ronan Lamy <ronan.l...@gmail.com> Branch: anntype2 Changeset: r80959:6ebeeb9aabc6 Date: 2015-11-25 15:22 +0000 http://bitbucket.org/pypy/pypy/changeset/6ebeeb9aabc6/
Log: Use ClassDescs instead of ClassDefs in our_issubclass() diff --git a/rpython/annotator/classdesc.py b/rpython/annotator/classdesc.py --- a/rpython/annotator/classdesc.py +++ b/rpython/annotator/classdesc.py @@ -258,8 +258,8 @@ yield self self = self.basedef - def issubclass(self, otherclsdef): - return otherclsdef in self.parentdefs + def issubclass(self, other): + return self.classdesc.issubclass(other.classdesc) def getallsubdefs(self): pending = [self] @@ -722,6 +722,9 @@ return True return False + def issubclass(self, other): + return issubclass(self.pyobj, other.pyobj) + def lookup(self, name): cdesc = self while name not in cdesc.classdict: diff --git a/rpython/annotator/model.py b/rpython/annotator/model.py --- a/rpython/annotator/model.py +++ b/rpython/annotator/model.py @@ -436,7 +436,7 @@ def __init__(self, classdef, can_be_None=False, flags={}): self.classdef = classdef - self.knowntype = classdef or object + self.knowntype = classdef.classdesc if classdef else None self.can_be_None = can_be_None self.flags = flags diff --git a/rpython/annotator/unaryop.py b/rpython/annotator/unaryop.py --- a/rpython/annotator/unaryop.py +++ b/rpython/annotator/unaryop.py @@ -19,7 +19,7 @@ from rpython.annotator.binaryop import _clone ## XXX where to put this? from rpython.annotator.binaryop import _dict_can_only_throw_keyerror from rpython.annotator.binaryop import _dict_can_only_throw_nothing -from rpython.annotator.classdesc import ClassDef +from rpython.annotator.classdesc import ClassDesc from rpython.annotator.model import AnnotatorError from rpython.annotator.argument import simple_args, complex_args @@ -38,27 +38,27 @@ return True def classify(cls): from rpython.rlib.rarithmetic import base_int - if isinstance(cls, ClassDef): - return 'def' + if isinstance(cls, ClassDesc): + return 'desc' if cls.__module__ == '__builtin__' or issubclass(cls, base_int): return 'builtin' else: return 'cls' kind1 = classify(cls1) kind2 = classify(cls2) - if kind1 != 'def' and kind2 != 'def': + if kind1 != 'desc' and kind2 != 'desc': return issubclass(cls1, cls2) - if kind1 == 'builtin' and kind2 == 'def': + if kind1 == 'builtin' and kind2 == 'desc': return False - elif kind1 == 'def' and kind2 == 'builtin': + elif kind1 == 'desc' and kind2 == 'builtin': return issubclass(object, cls2) else: - def toclassdef(kind, cls): - if kind != 'def': - return bk.getuniqueclassdef(cls) + def toclassdesc(kind, cls): + if kind != 'desc': + return bk.getdesc(cls) else: return cls - return toclassdef(kind1, cls1).issubclass(toclassdef(kind2, cls2)) + return toclassdesc(kind1, cls1).issubclass(toclassdesc(kind2, cls2)) def s_isinstance(annotator, s_obj, s_type, variables): diff --git a/rpython/rlib/test/test_objectmodel.py b/rpython/rlib/test/test_objectmodel.py --- a/rpython/rlib/test/test_objectmodel.py +++ b/rpython/rlib/test/test_objectmodel.py @@ -113,11 +113,11 @@ Strange_def = a.bookkeeper.getuniqueclassdef(Strange) graph = graphof(t, strange_key_eq) - assert a.binding(graph.getargs()[0]).knowntype == Strange_def + assert a.binding(graph.getargs()[0]).classdef == Strange_def assert a.binding(graph.getargs()[1]).knowntype == str assert a.binding(graph.getargs()[2]).knowntype == str graph = graphof(t, strange_key_hash) - assert a.binding(graph.getargs()[0]).knowntype == Strange_def + assert a.binding(graph.getargs()[0]).classdef == Strange_def assert a.binding(graph.getargs()[1]).knowntype == str diff --git a/rpython/rtyper/test/test_llannotation.py b/rpython/rtyper/test/test_llannotation.py --- a/rpython/rtyper/test/test_llannotation.py +++ b/rpython/rtyper/test/test_llannotation.py @@ -15,6 +15,7 @@ def __init__(self, cls=C): self.cls = cls self.name = cls.__name__ + self.classdesc = cls def test_ll_to_annotation(): s_z = ll_to_annotation(lltype.Signed._defl()) diff --git a/rpython/rtyper/test/test_nongc.py b/rpython/rtyper/test/test_nongc.py --- a/rpython/rtyper/test/test_nongc.py +++ b/rpython/rtyper/test/test_nongc.py @@ -40,7 +40,7 @@ #does not raise: s = a.build_types(f, []) Adef = a.bookkeeper.getuniqueclassdef(A) - assert s.knowntype == Adef + assert s.classdef == Adef rtyper = RPythonTyper(a) rtyper.specialize() assert (Adef, 'raw') in rtyper.instance_reprs @@ -59,7 +59,7 @@ s = a.build_types(f, []) Adef = a.bookkeeper.getuniqueclassdef(A) Bdef = a.bookkeeper.getuniqueclassdef(B) - assert s.knowntype == Bdef + assert s.classdef == Bdef rtyper = RPythonTyper(a) rtyper.specialize() assert (Adef, 'raw') in rtyper.instance_reprs _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit