[pypy-svn] r24733 - in pypy/dist/pypy: annotation rpython rpython/lltypesystem rpython/lltypesystem/test rpython/memory
pedronis at codespeak.net
pedronis at codespeak.net
Tue Mar 21 22:25:07 CET 2006
Author: pedronis
Date: Tue Mar 21 22:24:58 2006
New Revision: 24733
Modified:
pypy/dist/pypy/annotation/builtin.py
pypy/dist/pypy/rpython/llinterp.py
pypy/dist/pypy/rpython/lltypesystem/llmemory.py
pypy/dist/pypy/rpython/lltypesystem/lloperation.py
pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py
pypy/dist/pypy/rpython/memory/lladdress.py
pypy/dist/pypy/rpython/raddress.py
pypy/dist/pypy/rpython/rbuiltin.py
Log:
cast_adr_to_int. proper hashing for addresses.
Modified: pypy/dist/pypy/annotation/builtin.py
==============================================================================
--- pypy/dist/pypy/annotation/builtin.py (original)
+++ pypy/dist/pypy/annotation/builtin.py Tue Mar 21 22:24:58 2006
@@ -322,6 +322,9 @@
assert s_type.is_constant()
return SomePtr(s_type.const)
+def llmemory_cast_adr_to_int(s):
+ return SomeInteger() # xxx
+
def rstack_yield_current_frame_to_caller():
return SomeExternalObject(pypy.rpython.rstack.frame_stack_top)
@@ -369,6 +372,7 @@
BUILTIN_ANALYZERS[pypy.rpython.objectmodel.hint] = robjmodel_hint
BUILTIN_ANALYZERS[pypy.rpython.lltypesystem.llmemory.cast_ptr_to_adr] = llmemory_cast_ptr_to_adr
BUILTIN_ANALYZERS[pypy.rpython.lltypesystem.llmemory.cast_adr_to_ptr] = llmemory_cast_adr_to_ptr
+BUILTIN_ANALYZERS[pypy.rpython.lltypesystem.llmemory.cast_adr_to_int] = llmemory_cast_adr_to_int
BUILTIN_ANALYZERS[pypy.rpython.rstack.yield_current_frame_to_caller] = (
rstack_yield_current_frame_to_caller)
Modified: pypy/dist/pypy/rpython/llinterp.py
==============================================================================
--- pypy/dist/pypy/rpython/llinterp.py (original)
+++ pypy/dist/pypy/rpython/llinterp.py Tue Mar 21 22:24:58 2006
@@ -511,6 +511,10 @@
assert checkadr(adr)
return llmemory.cast_adr_to_ptr(adr, TYPE)
+ def op_cast_adr_to_int(self, adr):
+ assert checkadr(adr)
+ return llmemory.cast_adr_to_int(adr)
+
def op_cast_int_to_float(self, i):
assert type(i) is int
return float(i)
Modified: pypy/dist/pypy/rpython/lltypesystem/llmemory.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/llmemory.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/llmemory.py Tue Mar 21 22:24:58 2006
@@ -154,6 +154,9 @@
def _cast_to_ptr(self, EXPECTED_TYPE):
return lltype.cast_pointer(EXPECTED_TYPE, self.get())
+ def _cast_to_int(self):
+ return self.get()._cast_to_int()
+
# XXX the indexing in code like
# addr.signed[0] = v
# is just silly. remove it.
@@ -202,3 +205,6 @@
def cast_adr_to_ptr(adr, EXPECTED_TYPE):
return adr._cast_to_ptr(EXPECTED_TYPE)
+def cast_adr_to_int(adr):
+ return adr._cast_to_int()
+
Modified: pypy/dist/pypy/rpython/lltypesystem/lloperation.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/lloperation.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/lloperation.py Tue Mar 21 22:24:58 2006
@@ -267,6 +267,7 @@
'adr_ge': LLOp(canfold=True),
'cast_ptr_to_adr': LLOp(canfold=True),
'cast_adr_to_ptr': LLOp(canfold=True),
+ 'cast_adr_to_int': LLOp(canfold=True),
# __________ GC operations __________
Modified: pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py Tue Mar 21 22:24:58 2006
@@ -80,3 +80,18 @@
return s1 == s2
res = interpret(f, [])
assert res
+
+def test_cast_adr_to_int():
+ from pypy.rpython.memory.test.test_llinterpsim import interpret
+ from pypy.rpython.lltypesystem import lltype
+ S = lltype.GcStruct("S", ("x", lltype.Signed))
+ Sptr = lltype.Ptr(S)
+ def f():
+ s1 = lltype.malloc(S)
+ adr = cast_ptr_to_adr(s1)
+ i = cast_adr_to_int(adr)
+ i2 = lltype.cast_ptr_to_int(s1)
+ return i == i2
+ assert f()
+ res = interpret(f, [])
+ assert res
Modified: pypy/dist/pypy/rpython/memory/lladdress.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/lladdress.py (original)
+++ pypy/dist/pypy/rpython/memory/lladdress.py Tue Mar 21 22:24:58 2006
@@ -62,6 +62,9 @@
def _cast_to_ptr(self, EXPECTED_TYPE):
from pypy.rpython.memory.lltypesimulation import simulatorptr
return simulatorptr(EXPECTED_TYPE, self)
+
+ def _cast_to_int(self):
+ return self.intaddress
class _accessor(object):
Modified: pypy/dist/pypy/rpython/raddress.py
==============================================================================
--- pypy/dist/pypy/rpython/raddress.py (original)
+++ pypy/dist/pypy/rpython/raddress.py Tue Mar 21 22:24:58 2006
@@ -2,7 +2,7 @@
from pypy.annotation.pairtype import pairtype
from pypy.annotation import model as annmodel
from pypy.rpython.memory.lladdress import NULL, address
-from pypy.rpython.lltypesystem.llmemory import Address
+from pypy.rpython.lltypesystem.llmemory import Address, cast_adr_to_int
from pypy.rpython.rmodel import Repr, IntegerRepr
from pypy.rpython.rptr import PtrRepr
from pypy.rpython.lltypesystem import lltype
@@ -45,7 +45,7 @@
def get_ll_hash_function(self):
def ll_hash(addr1):
- return 0 # XXX do better
+ return cast_adr_to_int(addr1)
return ll_hash
Modified: pypy/dist/pypy/rpython/rbuiltin.py
==============================================================================
--- pypy/dist/pypy/rpython/rbuiltin.py (original)
+++ pypy/dist/pypy/rpython/rbuiltin.py Tue Mar 21 22:24:58 2006
@@ -485,6 +485,14 @@
return hop.genop('cast_adr_to_ptr', [adr],
resulttype = TYPE.value)
+def rtype_cast_adr_to_int(hop):
+ assert isinstance(hop.args_r[0], raddress.AddressRepr)
+ adr, = hop.inputargs(hop.args_r[0])
+ hop.exception_cannot_occur()
+ return hop.genop('cast_adr_to_int', [adr],
+ resulttype = lltype.Signed)
+
BUILTIN_TYPER[llmemory.cast_ptr_to_adr] = rtype_cast_ptr_to_adr
BUILTIN_TYPER[llmemory.cast_adr_to_ptr] = rtype_cast_adr_to_ptr
+BUILTIN_TYPER[llmemory.cast_adr_to_int] = rtype_cast_adr_to_int
More information about the Pypy-commit
mailing list