[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