[pypy-svn] r37691 - in pypy/dist/pypy: objspace/cpy/test rpython

arigo at codespeak.net arigo at codespeak.net
Wed Jan 31 20:59:54 CET 2007


Author: arigo
Date: Wed Jan 31 20:59:51 2007
New Revision: 37691

Modified:
   pypy/dist/pypy/objspace/cpy/test/test_typedef.py
   pypy/dist/pypy/rpython/rmodel.py
Log:
Test from Janzert, fix.


Modified: pypy/dist/pypy/objspace/cpy/test/test_typedef.py
==============================================================================
--- pypy/dist/pypy/objspace/cpy/test/test_typedef.py	(original)
+++ pypy/dist/pypy/objspace/cpy/test/test_typedef.py	Wed Jan 31 20:59:51 2007
@@ -419,3 +419,18 @@
     assert type(res) is dict
     assert res.keys() == ['hello']
     assert type(res['hello']).__name__ == 'MyType'
+
+# ____________________________________________________________
+
+def test_interp_dict():
+    space = CPyObjSpace()
+    W_MyType.typedef = TypeDef("MyType", hello = 7)
+
+    def entry_point(x):
+        d = {W_MyType(space, x): True}
+        return space.wrap(d.keys()[0])
+
+    fn = compile(entry_point, [int],
+                 annotatorpolicy = CPyAnnotatorPolicy(space))
+    res = fn(42, expected_extra_mallocs=1)
+    assert res.hello == 7

Modified: pypy/dist/pypy/rpython/rmodel.py
==============================================================================
--- pypy/dist/pypy/rpython/rmodel.py	(original)
+++ pypy/dist/pypy/rpython/rmodel.py	Wed Jan 31 20:59:51 2007
@@ -171,7 +171,8 @@
         if (isinstance(T, lltype.Ptr) and
             isinstance(T.TO, (lltype.Struct,
                               lltype.Array,
-                              lltype.ForwardReference))):
+                              lltype.ForwardReference)) and
+            T.TO._gckind != 'cpy'):
             return DummyValueBuilder(rtyper, T.TO)
         else:
             return None
@@ -450,7 +451,8 @@
 
 def externalvsinternal(rtyper, item_repr): # -> external_item_repr, (internal_)item_repr
     from pypy.rpython import rclass
-    if isinstance(item_repr, rclass.AbstractInstanceRepr):
+    if (isinstance(item_repr, rclass.AbstractInstanceRepr) and
+        getattr(item_repr, 'gcflavor', 'gc') == 'gc'):
         return item_repr, rclass.getinstancerepr(rtyper, None)
     else:
         return item_repr, item_repr



More information about the Pypy-commit mailing list