[pypy-svn] r47300 - pypy/branch/kill-keepalives-again/pypy/rpython/memory

arigo at codespeak.net arigo at codespeak.net
Mon Oct 8 19:15:23 CEST 2007


Author: arigo
Date: Mon Oct  8 19:15:22 2007
New Revision: 47300

Modified:
   pypy/branch/kill-keepalives-again/pypy/rpython/memory/gc.py
   pypy/branch/kill-keepalives-again/pypy/rpython/memory/gcwrapper.py
Log:
Move the malloc() method used for tests to the GCBase class.
This allows us to share this increasingly long-winded logic.


Modified: pypy/branch/kill-keepalives-again/pypy/rpython/memory/gc.py
==============================================================================
--- pypy/branch/kill-keepalives-again/pypy/rpython/memory/gc.py	(original)
+++ pypy/branch/kill-keepalives-again/pypy/rpython/memory/gc.py	Mon Oct  8 19:15:22 2007
@@ -91,6 +91,34 @@
     def size_gc_header(self, typeid=0):
         return self.gcheaderbuilder.size_gc_header
 
+    def malloc(self, typeid, length=0, zero=False):
+        """For testing.  The interface used by the gctransformer is
+        the four malloc_[fixed,var]size[_clear]() functions.
+        """
+        size = self.fixed_size(typeid)
+        needs_finalizer = bool(self.getfinalizer(typeid))
+        contains_weakptr = self.weakpointer_offset(typeid) != -1
+        assert not (needs_finalizer and contains_weakptr)
+        if self.is_varsize(typeid):
+            assert not contains_weakptr
+            itemsize = self.varsize_item_sizes(typeid)
+            offset_to_length = self.varsize_offset_to_length(typeid)
+            if zero:
+                malloc_varsize = self.malloc_varsize_clear
+            else:
+                malloc_varsize = self.malloc_varsize
+            ref = malloc_varsize(typeid, length, size, itemsize,
+                                 offset_to_length, True, needs_finalizer)
+        else:
+            if zero:
+                malloc_fixedsize = self.malloc_fixedsize_clear
+            else:
+                malloc_fixedsize = self.malloc_fixedsize
+            ref = malloc_fixedsize(typeid, size, True, needs_finalizer,
+                                   contains_weakptr)
+        # lots of cast and reverse-cast around...
+        return llmemory.cast_ptr_to_adr(ref)
+
     def x_swap_pool(self, newpool):
         return newpool
 
@@ -107,13 +135,16 @@
         self.get_roots = get_roots
         #self.set_query_functions(None, None, None, None, None, None, None)
    
-    def malloc(self, typeid, length=0):
+    def malloc(self, typeid, length=0, zero=False):
         size = self.fixed_size(typeid)
         if self.is_varsize(typeid):
             size += length * self.varsize_item_sizes(typeid)
         result = raw_malloc(size)
         if not result:
             raise memoryError
+        if zero:
+            raw_memclear(result, size)
+        # XXX set the length field?
         return result
          
     def collect(self):
@@ -176,24 +207,6 @@
         self.collect_in_progress = False
         self.prev_collect_end_time = 0.0
 
-    def malloc(self, typeid, length=0):
-        size = self.fixed_size(typeid)
-        needs_finalizer =  bool(self.getfinalizer(typeid))
-        contains_weakptr = self.weakpointer_offset(typeid) != -1
-        assert not (needs_finalizer and contains_weakptr)
-        if self.is_varsize(typeid):
-            assert not contains_weakptr
-            itemsize = self.varsize_item_sizes(typeid)
-            offset_to_length = self.varsize_offset_to_length(typeid)
-            ref = self.malloc_varsize(typeid, length, size, itemsize,
-                                      offset_to_length, True, needs_finalizer)
-        else:
-            ref = self.malloc_fixedsize(typeid, size, True, needs_finalizer,
-                                        contains_weakptr)
-        # XXX lots of cast and reverse-cast around, but this malloc()
-        # should eventually be killed
-        return llmemory.cast_ptr_to_adr(ref)
-
     def malloc_fixedsize(self, typeid, size, can_collect, has_finalizer=False,
                          contains_weakptr=False):
         if can_collect and self.bytes_malloced > self.bytes_malloced_threshold:
@@ -1026,19 +1039,6 @@
         self.tospace = NULL
         llarena.arena_free(self.fromspace)
         self.fromspace = NULL
-
-    def malloc(self, typeid, length=0):
-        size = self.fixed_size(typeid)
-        if self.is_varsize(typeid):
-            itemsize = self.varsize_item_sizes(typeid)
-            offset_to_length = self.varsize_offset_to_length(typeid)
-            ref = self.malloc_varsize(typeid, length, size, itemsize,
-                                      offset_to_length, True)
-        else:
-            ref = self.malloc_fixedsize(typeid, size, True)
-        # XXX lots of cast and reverse-cast around, but this malloc()
-        # should eventually be killed
-        return llmemory.cast_ptr_to_adr(ref)
     
     def malloc_fixedsize(self, typeid, size, can_collect, has_finalizer=False,
                          contains_weakptr=False):

Modified: pypy/branch/kill-keepalives-again/pypy/rpython/memory/gcwrapper.py
==============================================================================
--- pypy/branch/kill-keepalives-again/pypy/rpython/memory/gcwrapper.py	(original)
+++ pypy/branch/kill-keepalives-again/pypy/rpython/memory/gcwrapper.py	Mon Oct  8 19:15:22 2007
@@ -48,7 +48,7 @@
     def malloc(self, TYPE, n=None, flavor='gc', zero=False):
         if flavor == 'gc':
             typeid = self.get_type_id(TYPE)
-            addr = self.gc.malloc(typeid, n)
+            addr = self.gc.malloc(typeid, n, zero=zero)
             return llmemory.cast_adr_to_ptr(addr, lltype.Ptr(TYPE))
         else:
             return lltype.malloc(TYPE, n, flavor=flavor, zero=zero)



More information about the Pypy-commit mailing list