[pypy-svn] r27164 - in pypy/dist/pypy: rpython rpython/l3interp rpython/memory rpython/test translator/backendopt
cfbolz at codespeak.net
cfbolz at codespeak.net
Sat May 13 12:06:45 CEST 2006
Author: cfbolz
Date: Sat May 13 12:06:42 2006
New Revision: 27164
Modified:
pypy/dist/pypy/rpython/l3interp/convertgraph.py
pypy/dist/pypy/rpython/memory/gctransform.py
pypy/dist/pypy/rpython/objectmodel.py
pypy/dist/pypy/rpython/test/test_objectmodel.py
pypy/dist/pypy/translator/backendopt/all.py
Log:
add a __hash__ and a __cmp__ to symbolic to prevent bad things happening. of
course it did not actually help with the problem at hand :-(
Modified: pypy/dist/pypy/rpython/l3interp/convertgraph.py
==============================================================================
--- pypy/dist/pypy/rpython/l3interp/convertgraph.py (original)
+++ pypy/dist/pypy/rpython/l3interp/convertgraph.py Sat May 13 12:06:42 2006
@@ -82,11 +82,17 @@
value = fakeaddress(v.value)
else:
value = v.value
- try:
- res = clist.index(value)
- except ValueError:
- res = len(clist)
- clist.append(value)
+ for i, item in enumerate(clist):
+ # XXX hum, hum. The fact that symbolics are not comparable
+ # makes this ugly thing necessary :-(
+ try:
+ if item == value:
+ return i
+ except TypeError:
+ if item is value:
+ return i
+ res = len(clist)
+ clist.append(value)
return res
else:
position = self.var2stack[v]
@@ -94,9 +100,10 @@
def getoffset(self, offset):
clist = self.constants['int']
- try:
- res = clist.index(offset)
- except ValueError:
+ for i, item in enumerate(clist):
+ if item is offset:
+ return i
+ else:
res = len(clist)
clist.append(offset)
return res
Modified: pypy/dist/pypy/rpython/memory/gctransform.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gctransform.py (original)
+++ pypy/dist/pypy/rpython/memory/gctransform.py Sat May 13 12:06:42 2006
@@ -907,7 +907,7 @@
self.type_info_list.append(info)
self.id_of_type[TYPE] = type_id
offsets = offsets_to_gc_pointers(TYPE)
- info["ofstoptrs"] = self.offsets2table(offsets)
+ info["ofstoptrs"] = self.offsets2table(offsets, TYPE)
if not TYPE._is_varsize():
info["fixedsize"] = llmemory.sizeof(TYPE)
info["ofstolength"] = -1
@@ -933,10 +933,10 @@
assert isinstance(ARRAY, lltype.Array)
if ARRAY.OF != lltype.Void:
offsets = offsets_to_gc_pointers(ARRAY.OF)
- info["varofstoptrs"] = self.offsets2table(offsets)
+ info["varofstoptrs"] = self.offsets2table(offsets, ARRAY.OF)
info["varitemsize"] = llmemory.sizeof(ARRAY.OF)
else:
- info["varofstoptrs"] = self.offsets2table(())
+ info["varofstoptrs"] = self.offsets2table((), lltype.Void)
info["varitemsize"] = 0
return type_id
@@ -952,16 +952,15 @@
for a in gc_pointers_inside(value, llmemory.fakeaddress(value)):
self.addresses_of_static_ptrs_in_nongc.append(a)
- def offsets2table(self, offsets):
- key = tuple(offsets)
+ def offsets2table(self, offsets, TYPE):
try:
- return self.offsettable_cache[key]
+ return self.offsettable_cache[TYPE]
except KeyError:
cachedarray = lltype.malloc(self.gcdata.OFFSETS_TO_GC_PTR,
len(offsets), immortal=True)
for i, value in enumerate(offsets):
cachedarray[i] = value
- self.offsettable_cache[key] = cachedarray
+ self.offsettable_cache[TYPE] = cachedarray
return cachedarray
def finish(self):
Modified: pypy/dist/pypy/rpython/objectmodel.py
==============================================================================
--- pypy/dist/pypy/rpython/objectmodel.py (original)
+++ pypy/dist/pypy/rpython/objectmodel.py Sat May 13 12:06:42 2006
@@ -13,6 +13,12 @@
def lltype(self):
return None
+ def __cmp__(self, other):
+ raise TypeError("Symbolics can not be compared!")
+
+ def __hash__(self):
+ raise TypeError("Symbolics are not hashable!")
+
class ComputedIntSymbolic(Symbolic):
def __init__(self, compute_fn):
Modified: pypy/dist/pypy/rpython/test/test_objectmodel.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_objectmodel.py (original)
+++ pypy/dist/pypy/rpython/test/test_objectmodel.py Sat May 13 12:06:42 2006
@@ -266,3 +266,12 @@
assert A(12098).value == 12098
assert A(12098).getvalue() == 12098
+
+def test_symbolic():
+
+
+def test_symbolic_raises():
+ s1 = Symbolic()
+ s2 = Symbolic()
+ py.test.raises(TypeError, "s1 < s2")
+ py.test.raises(TypeError, "hash(s1)")
Modified: pypy/dist/pypy/translator/backendopt/all.py
==============================================================================
--- pypy/dist/pypy/translator/backendopt/all.py (original)
+++ pypy/dist/pypy/translator/backendopt/all.py Sat May 13 12:06:42 2006
@@ -16,7 +16,7 @@
inline_threshold=1,
mallocs=True,
merge_if_blocks_to_switch=True,
- propagate=False,
+ propagate=True,
heap2stack=False,
clever_malloc_removal=False):
More information about the Pypy-commit
mailing list