[pypy-svn] r77903 - in pypy/branch/32ptr-on-64bit/pypy/objspace/std: . test
arigo at codespeak.net
arigo at codespeak.net
Thu Oct 14 11:38:26 CEST 2010
Author: arigo
Date: Thu Oct 14 11:38:25 2010
New Revision: 77903
Modified:
pypy/branch/32ptr-on-64bit/pypy/objspace/std/mapdict.py
pypy/branch/32ptr-on-64bit/pypy/objspace/std/test/test_mapdict.py
Log:
Update mapdicts to only use rerased for the last field,
which allows all other fields to be compressed.
Modified: pypy/branch/32ptr-on-64bit/pypy/objspace/std/mapdict.py
==============================================================================
--- pypy/branch/32ptr-on-64bit/pypy/objspace/std/mapdict.py (original)
+++ pypy/branch/32ptr-on-64bit/pypy/objspace/std/mapdict.py Thu Oct 14 11:38:25 2010
@@ -413,11 +413,14 @@
rangen = unroll.unrolling_iterable(range(n))
nmin1 = n - 1
rangenmin1 = unroll.unrolling_iterable(range(nmin1))
+ #
class subcls(ObjectMixin, BaseMapdictObject, supercls):
+ _nmin1 = nmin1
+ for _i in rangenmin1:
+ locals()["_value%s" % _i] = None
+ locals()["_value%s" % nmin1] = rerased.erase(None)
+
def _init_empty(self, map):
- from pypy.rlib.debug import make_sure_not_resized
- for i in rangen:
- setattr(self, "_value%s" % i, rerased.erase(None))
self.map = map
def _has_storage_list(self):
@@ -430,22 +433,21 @@
def _mapdict_read_storage(self, index):
for i in rangenmin1:
if index == i:
- erased = getattr(self, "_value%s" % i)
- return rerased.unerase(erased, W_Root)
+ return getattr(self, "_value%s" % i)
if self._has_storage_list():
return self._mapdict_get_storage_list()[index - nmin1]
erased = getattr(self, "_value%s" % nmin1)
return rerased.unerase(erased, W_Root)
def _mapdict_write_storage(self, index, value):
- erased = rerased.erase(value)
for i in rangenmin1:
if index == i:
- setattr(self, "_value%s" % i, erased)
+ setattr(self, "_value%s" % i, value)
return
if self._has_storage_list():
self._mapdict_get_storage_list()[index - nmin1] = value
return
+ erased = rerased.erase(value)
setattr(self, "_value%s" % nmin1, erased)
def _mapdict_storage_length(self):
@@ -458,10 +460,10 @@
len_storage = len(storage)
for i in rangenmin1:
if i < len_storage:
- erased = rerased.erase(storage[i])
+ value = storage[i]
else:
- erased = rerased.erase(None)
- setattr(self, "_value%s" % i, erased)
+ value = None
+ setattr(self, "_value%s" % i, value)
has_storage_list = self._has_storage_list()
if len_storage < n:
assert not has_storage_list
Modified: pypy/branch/32ptr-on-64bit/pypy/objspace/std/test/test_mapdict.py
==============================================================================
--- pypy/branch/32ptr-on-64bit/pypy/objspace/std/test/test_mapdict.py (original)
+++ pypy/branch/32ptr-on-64bit/pypy/objspace/std/test/test_mapdict.py Thu Oct 14 11:38:25 2010
@@ -372,12 +372,18 @@
obj = objectcls()
obj.user_setup(space, cls)
obj.setdictvalue(space, "a", w1)
- assert rerased.unerase(obj._value0, W_Root) is w1
+ if objectcls._nmin1 == 0:
+ assert rerased.unerase(obj._value0, W_Root) is w1
+ else:
+ assert obj._value0 is w1
assert obj.getdictvalue(space, "a") is w1
assert obj.getdictvalue(space, "b") is None
assert obj.getdictvalue(space, "c") is None
obj.setdictvalue(space, "a", w2)
- assert rerased.unerase(obj._value0, W_Root) is w2
+ if objectcls._nmin1 == 0:
+ assert rerased.unerase(obj._value0, W_Root) is w2
+ else:
+ assert obj._value0 is w2
assert obj.getdictvalue(space, "a") == w2
assert obj.getdictvalue(space, "b") is None
assert obj.getdictvalue(space, "c") is None
@@ -395,7 +401,10 @@
res = obj.deldictvalue(space, "a")
assert res
- assert rerased.unerase(obj._value0, W_Root) is w4
+ if objectcls._nmin1 == 0:
+ assert rerased.unerase(obj._value0, W_Root) is w4
+ else:
+ assert obj._value0 is w4
assert obj.getdictvalue(space, "a") is None
assert obj.getdictvalue(space, "b") is w4
assert obj.getdictvalue(space, "c") is None
More information about the Pypy-commit
mailing list