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

nik at codespeak.net nik at codespeak.net
Tue Apr 25 09:25:23 CEST 2006


Author: nik
Date: Tue Apr 25 09:25:18 2006
New Revision: 26302

Modified:
   pypy/dist/pypy/rpython/ootypesystem/ootype.py
   pypy/dist/pypy/rpython/ootypesystem/rlist.py
   pypy/dist/pypy/rpython/ootypesystem/test/test_oortype.py
Log:
(dialtone, nik)
get rid of ForwardReferences in ListReprs.


Modified: pypy/dist/pypy/rpython/ootypesystem/ootype.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/ootype.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/ootype.py	Tue Apr 25 09:25:18 2006
@@ -869,5 +869,8 @@
 def setItemType(LIST, ITEMTYPE):
     return LIST._set_itemtype(ITEMTYPE)
 
+def hasItemType(LIST):
+    return LIST._ITEMTYPE is not None
+
 
 ROOT = Instance('Root', None, _is_root=True)

Modified: pypy/dist/pypy/rpython/ootypesystem/rlist.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/rlist.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/rlist.py	Tue Apr 25 09:25:18 2006
@@ -14,14 +14,13 @@
 
     def __init__(self, rtyper, item_repr, listitem=None):
         self.rtyper = rtyper
-        if not isinstance(item_repr, Repr):  # not computed yet, done by setup()
+        if not isinstance(item_repr, Repr):
             assert callable(item_repr)
             self._item_repr_computer = item_repr
-            self.LIST = ootype.ForwardReference()
         else:
-            self.LIST = ootype.List(item_repr.lowleveltype)
             self.external_item_repr, self.item_repr = \
                     externalvsinternal(rtyper, item_repr)
+        self.LIST = ootype.List()
         self.lowleveltype = self.LIST
         self.listitem = listitem
         self.list_cache = {}
@@ -31,8 +30,8 @@
         if 'item_repr' not in self.__dict__:
             self.external_item_repr, self.item_repr = \
                     externalvsinternal(self.rtyper, self._item_repr_computer())
-        if isinstance(self.lowleveltype, ootype.ForwardReference):
-            self.lowleveltype.become(ootype.List(self.item_repr.lowleveltype))
+        if not ootype.hasItemType(self.lowleveltype):
+            ootype.setItemType(self.lowleveltype, self.item_repr.lowleveltype)
 
     def null_const(self):
         return self.LIST._null

Modified: pypy/dist/pypy/rpython/ootypesystem/test/test_oortype.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/test/test_oortype.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/test/test_oortype.py	Tue Apr 25 09:25:18 2006
@@ -149,15 +149,6 @@
     res = interpret(oof, [], type_system='ootype')
     assert res is -1
 
-def test_list_lltype_identity():
-    t = TranslationContext()
-    t.buildannotator()
-    rtyper = t.buildrtyper()
-    repr1 = ListRepr(rtyper, signed_repr)
-    repr2 = ListRepr(rtyper, signed_repr)
-    assert repr1.lowleveltype == repr2.lowleveltype
-    assert hash(repr1.lowleveltype) == hash(repr2.lowleveltype)
-
 def test_list_annotation():
     LIST = List(Signed)
 



More information about the Pypy-commit mailing list