[pypy-svn] r27516 - pypy/dist/pypy/rpython/memory

arigo at codespeak.net arigo at codespeak.net
Sat May 20 21:02:14 CEST 2006


Author: arigo
Date: Sat May 20 21:02:13 2006
New Revision: 27516

Modified:
   pypy/dist/pypy/rpython/memory/gc.py
Log:
Somehow a fix.  But only because the lladdress simulator
doesn't know about direct_fieldptr().  Kill!


Modified: pypy/dist/pypy/rpython/memory/gc.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gc.py	(original)
+++ pypy/dist/pypy/rpython/memory/gc.py	Sat May 20 21:02:13 2006
@@ -267,7 +267,8 @@
         prevpoolnode = lltype.nullptr(self.POOLNODE)
         poolnode = firstpoolnode
         while poolnode:   #sweep
-            ppnext = lltype.direct_fieldptr(poolnode, 'linkedlist')
+            ppnext = llmemory.cast_ptr_to_adr(poolnode)
+            ppnext += llmemory.offsetof(self.POOLNODE, 'linkedlist')
             hdr = poolnode.linkedlist
             while hdr:  #sweep
                 typeid = hdr.typeid >> 1
@@ -280,14 +281,15 @@
                 estimate = raw_malloc_usage(size_gc_header + size)
                 if hdr.typeid & 1:
                     hdr.typeid = hdr.typeid & (~1)
-                    ppnext[0] = hdr
-                    ppnext = lltype.direct_fieldptr(hdr, 'next')
+                    ppnext.address[0] = addr
+                    ppnext = llmemory.cast_ptr_to_adr(hdr)
+                    ppnext += llmemory.offsetof(self.HDR, 'next')
                     curr_heap_size += estimate
                 else:
                     freed_size += estimate
                     raw_free(addr)
                 hdr = next
-            ppnext[0] = lltype.nullptr(self.HDR)
+            ppnext.address[0] = llmemory.NULL
             next = poolnode.nextnode
             if not poolnode.linkedlist and prevpoolnode:
                 # completely empty node



More information about the Pypy-commit mailing list