[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