[pypy-svn] r14333 - in pypy/dist/pypy/rpython: . test
hpk at codespeak.net
hpk at codespeak.net
Wed Jul 6 15:22:45 CEST 2005
Author: hpk
Date: Wed Jul 6 15:22:43 2005
New Revision: 14333
Modified:
pypy/dist/pypy/rpython/rclass.py
pypy/dist/pypy/rpython/test/test_rclass.py
Log:
(arre, hpk, thanks samuele)
implemented issubtype (which you get from using issubclass)
Modified: pypy/dist/pypy/rpython/rclass.py
==============================================================================
--- pypy/dist/pypy/rpython/rclass.py (original)
+++ pypy/dist/pypy/rpython/rclass.py Wed Jul 6 15:22:43 2005
@@ -281,6 +281,10 @@
raise MissingRTypeAttribute(attr)
self.rbase.setclsfield(vcls, attr, vvalue, llops)
+ def rtype_issubtype(self, hop):
+ class_repr = get_type_repr(self.rtyper)
+ v_cls1, v_cls2 = hop.inputargs(class_repr, class_repr)
+ return hop.gendirectcall(ll_issubclass, v_cls1, v_cls2)
def get_type_repr(rtyper):
return getclassrepr(rtyper, None)
Modified: pypy/dist/pypy/rpython/test/test_rclass.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_rclass.py (original)
+++ pypy/dist/pypy/rpython/test/test_rclass.py Wed Jul 6 15:22:43 2005
@@ -144,3 +144,27 @@
return a.meth() + b.meth()
res = interpret(f, [])
assert res == 246
+
+def test_issubclass_type():
+ class A:
+ pass
+ class B(A):
+ pass
+ def f(i):
+ if i == 0:
+ c1 = A()
+ else:
+ c1 = B()
+ return issubclass(type(c1), B)
+ assert interpret(f, [0], view=False, viewbefore=False) == False
+ assert interpret(f, [1], view=False, viewbefore=False) == True
+
+ def g(i):
+ if i == 0:
+ c1 = A()
+ else:
+ c1 = B()
+ return issubclass(type(c1), A)
+ assert interpret(g, [0], view=False, viewbefore=False) == True
+ assert interpret(g, [1], view=False, viewbefore=False) == True
+
More information about the Pypy-commit
mailing list