[pypy-svn] r24675 - in pypy/dist/pypy/rpython/ootypesystem: . test

nik at codespeak.net nik at codespeak.net
Tue Mar 21 13:55:53 CET 2006


Author: nik
Date: Tue Mar 21 13:55:51 2006
New Revision: 24675

Modified:
   pypy/dist/pypy/rpython/ootypesystem/ootype.py
   pypy/dist/pypy/rpython/ootypesystem/test/test_ootype.py
Log:
(nik, input from pedronis)
add dynamicType helper to ootypesystem.


Modified: pypy/dist/pypy/rpython/ootypesystem/ootype.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/ootype.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/ootype.py	Tue Mar 21 13:55:51 2006
@@ -427,6 +427,10 @@
     assert isinstance(typeOf(inst), Instance)
     return inst._classof()
 
+def dynamicType(inst):
+    assert isinstance(typeOf(inst), Instance)
+    return classof(inst)._INSTANCE
+
 def subclassof(class1, class2):
     assert isinstance(class1, _class)
     assert isinstance(class2, _class)

Modified: pypy/dist/pypy/rpython/ootypesystem/test/test_ootype.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/test/test_ootype.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/test/test_ootype.py	Tue Mar 21 13:55:51 2006
@@ -55,6 +55,17 @@
     assert classof(i2) is not classof(i)
     assert classof(i2) != classof(i)
     
+def test_dynamictype():
+    A = Instance("A", ROOT)
+    B = Instance("B", A)
+    a = new(A)
+    b = new(B)
+    assert dynamicType(a) is A
+    assert dynamicType(b) is B
+
+    b = ooupcast(A, b)
+    assert dynamicType(b) is B
+
 def test_simple_default_class():
     I = Instance("test", ROOT, {"a": (Signed, 3)})
     i = new(I)



More information about the Pypy-commit mailing list