[pypy-svn] r25349 - in pypy/dist/pypy/rpython/ootypesystem: . test
nik at codespeak.net
nik at codespeak.net
Wed Apr 5 12:33:35 CEST 2006
Author: nik
Date: Wed Apr 5 12:33:33 2006
New Revision: 25349
Modified:
pypy/dist/pypy/rpython/ootypesystem/ootype.py
pypy/dist/pypy/rpython/ootypesystem/rlist.py
pypy/dist/pypy/rpython/ootypesystem/test/test_oolist.py
pypy/dist/pypy/rpython/ootypesystem/test/test_oortype.py
Log:
don't cache list types for the reprs, instead define sensible eq/hash
behaviour. suggestion by samuele, also necessary for recursive list
types which are about to be introduced.
Modified: pypy/dist/pypy/rpython/ootypesystem/ootype.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/ootype.py (original)
+++ pypy/dist/pypy/rpython/ootypesystem/ootype.py Wed Apr 5 12:33:33 2006
@@ -189,6 +189,17 @@
def __str__(self):
return '%s(%s)' % (self.__class__.__name__, self._ITEMTYPE)
+ def __eq__(self, other):
+ if not isinstance(other, List):
+ return False
+ return self._ITEMTYPE == other._ITEMTYPE
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ def __hash__(self):
+ return hash(self._ITEMTYPE)
+
def _lookup(self, meth_name):
METH = self._METHODS.get(meth_name)
meth = None
Modified: pypy/dist/pypy/rpython/ootypesystem/rlist.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/rlist.py (original)
+++ pypy/dist/pypy/rpython/ootypesystem/rlist.py Wed Apr 5 12:33:33 2006
@@ -16,7 +16,7 @@
assert callable(item_repr)
self._item_repr_computer = item_repr
else:
- self.lowleveltype = list_type(item_repr)
+ self.lowleveltype = ootype.List(item_repr.lowleveltype)
self.external_item_repr, self.item_repr = \
externalvsinternal(rtyper, item_repr)
self.listitem = listitem
@@ -27,7 +27,7 @@
if 'item_repr' not in self.__dict__:
self.external_item_repr, self.item_repr = \
externalvsinternal(self.rtyper, self._item_repr_computer())
- self.lowleveltype = list_type(self.item_repr)
+ self.lowleveltype = ootype.List(self.item_repr.lowleveltype)
def send_message(self, hop, message, can_raise=False):
v_args = hop.inputargs(self, *hop.args_r[1:])
@@ -49,17 +49,6 @@
ListRepr = BaseListRepr
FixedSizeListRepr = BaseListRepr
-_list_types = {}
-
-def list_type(item_repr):
- key = item_repr.lowleveltype
- if _list_types.has_key(key):
- return _list_types[key]
- else:
- LIST = ootype.List(key)
- _list_types[key] = LIST
- return LIST
-
class __extend__(pairtype(BaseListRepr, IntegerRepr)):
def rtype_getitem((r_list, r_int), hop):
Modified: pypy/dist/pypy/rpython/ootypesystem/test/test_oolist.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/test/test_oolist.py (original)
+++ pypy/dist/pypy/rpython/ootypesystem/test/test_oolist.py Wed Apr 5 12:33:33 2006
@@ -37,6 +37,14 @@
n = null(LT)
py.test.raises(RuntimeError, "n.append(0)")
+def test_eq_hash():
+ LT1 = List(Signed)
+ LT2 = List(Signed)
+ LT3 = List(Unsigned)
+ assert LT1 == LT2
+ assert LT1 != LT3
+ assert hash(LT1) == hash(LT2)
+
class TestInterpreted:
def test_append_length(self):
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 Wed Apr 5 12:33:33 2006
@@ -155,7 +155,8 @@
rtyper = t.buildrtyper()
repr1 = ListRepr(rtyper, signed_repr)
repr2 = ListRepr(rtyper, signed_repr)
- assert repr1.lowleveltype is repr2.lowleveltype
+ 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