[pypy-svn] r29827 - in pypy/dist/pypy/rpython: . lltypesystem
arigo at codespeak.net
arigo at codespeak.net
Sat Jul 8 15:58:17 CEST 2006
Author: arigo
Date: Sat Jul 8 15:58:15 2006
New Revision: 29827
Modified:
pypy/dist/pypy/rpython/lltypesystem/llmemory.py
pypy/dist/pypy/rpython/lltypesystem/lltype.py
pypy/dist/pypy/rpython/lltypesystem/opimpl.py
pypy/dist/pypy/rpython/rmodel.py
Log:
Small fixes to uncommon addr operations in llinterp.
Modified: pypy/dist/pypy/rpython/lltypesystem/llmemory.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/llmemory.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/llmemory.py Sat Jul 8 15:58:15 2006
@@ -39,6 +39,8 @@
return NotImplemented
return ItemOffset(self.TYPE, self.repeat * other)
+ __rmul__ = __mul__
+
def __neg__(self):
return ItemOffset(self.TYPE, -self.repeat)
@@ -521,6 +523,7 @@
fakeweakaddress(None))
def cast_ptr_to_weakadr(obj):
+ # XXX this is missing the normalizations done by _ptr._cast_to_adr()
assert isinstance(lltype.typeOf(obj), lltype.Ptr)
return fakeweakaddress(obj)
Modified: pypy/dist/pypy/rpython/lltypesystem/lltype.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/lltype.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/lltype.py Sat Jul 8 15:58:15 2006
@@ -1063,12 +1063,12 @@
return _ptr(PTRTYPE, struc, solid=self._solid)
def _cast_to_int(self):
+ if not self:
+ return 0 # NULL pointer
obj = self._obj
if isinstance(obj, int):
return obj # special case for cast_int_to_ptr() results
- if obj is None:
- return 0 # NULL pointer
- obj = top_container(obj)
+ obj = normalizeptr(self)._obj
result = intmask(id(obj))
# assume that id() returns an addressish value which is
# not zero and aligned to at least a multiple of 4
Modified: pypy/dist/pypy/rpython/lltypesystem/opimpl.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/opimpl.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/opimpl.py Sat Jul 8 15:58:15 2006
@@ -149,7 +149,7 @@
def op_int_mul(x, y):
assert isinstance(x, (int, llmemory.AddressOffset))
- assert isinstance(y, int)
+ assert isinstance(y, (int, llmemory.AddressOffset))
return intmask(x * y)
Modified: pypy/dist/pypy/rpython/rmodel.py
==============================================================================
--- pypy/dist/pypy/rpython/rmodel.py (original)
+++ pypy/dist/pypy/rpython/rmodel.py Sat Jul 8 15:58:15 2006
@@ -213,11 +213,13 @@
raise TyperError('id() of an instance of the non-pointer %r' % (
self,))
vobj, = hop.inputargs(self)
- # XXX
- v_waddr = hop.genop('cast_ptr_to_weakadr', [vobj],
- resulttype=llmemory.WeakGcAddress)
- return hop.genop('cast_weakadr_to_int', [v_waddr], resulttype=Signed)
-
+ # XXX why did this go through weakadr??
+ #v_waddr = hop.genop('cast_ptr_to_weakadr', [vobj],
+ # resulttype=llmemory.WeakGcAddress)
+ #return hop.genop('cast_weakadr_to_int', [v_waddr], resulttype=Signed)
+
+ return hop.genop('cast_ptr_to_int', [vobj], resulttype=Signed)
+
def rtype_hash(self, hop):
ll_hash = self.get_ll_hash_function()
v, = hop.inputargs(self)
More information about the Pypy-commit
mailing list