[pypy-svn] r18509 - in pypy/dist/pypy/rpython/memory: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Wed Oct 12 19:57:21 CEST 2005


Author: cfbolz
Date: Wed Oct 12 19:57:16 2005
New Revision: 18509

Modified:
   pypy/dist/pypy/rpython/memory/gc.py
   pypy/dist/pypy/rpython/memory/lltypesimulation.py
   pypy/dist/pypy/rpython/memory/simulator.py
   pypy/dist/pypy/rpython/memory/test/test_gc.py
   pypy/dist/pypy/rpython/memory/test/test_lltypesimulation.py
Log:
(mwh, cfbolz):
  * allowed for mallocing zero bytes, which is turned into a malloc of one
    byte
  * added support for empty structs in lltypesimulation
  * added DummyGC, that never collects


Modified: pypy/dist/pypy/rpython/memory/gc.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gc.py	(original)
+++ pypy/dist/pypy/rpython/memory/gc.py	Wed Oct 12 19:57:16 2005
@@ -34,12 +34,14 @@
     ll = AddressLinkedList()
     ll.append(NULL)
     ll.append(raw_malloc(10))
+    ll.pop() #make the annotator see pop
     return ll
 
 def dummy_get_roots2():
     ll = AddressLinkedList()
     ll.append(raw_malloc(10))
     ll.append(NULL)
+    ll.pop() #make the annotator see pop
     return ll
 
 
@@ -67,6 +69,30 @@
         "NOT_RPYTHON"
         pass
 
+class DummyGC(GCBase):
+    _alloc_flavor_ = "raw"
+
+    def __init__(self, dummy=None, get_roots=None):
+        self.get_roots = get_roots
+        self.set_query_functions(None, None, None, None, None, None, None)
+   
+    def malloc(self, typeid, length=0):
+        size = self.fixed_size(typeid)
+        if self.is_varsize(typeid):
+            size += length * self.varsize_item_sizes(typeid)
+        return raw_malloc(size)
+         
+    def collect(self):
+        self.get_roots() #this is there so that the annotator thinks get_roots is a function
+
+    def size_gc_header(self, typeid=0):
+        return 0
+
+    def init_gc_object(self, addr, typeid):
+        return
+    init_gc_object_immortal = init_gc_object
+   
+
 class MarkSweepGC(GCBase):
     _alloc_flavor_ = "raw"
 

Modified: pypy/dist/pypy/rpython/memory/lltypesimulation.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/lltypesimulation.py	(original)
+++ pypy/dist/pypy/rpython/memory/lltypesimulation.py	Wed Oct 12 19:57:16 2005
@@ -48,7 +48,7 @@
         if isinstance(self._T, lltype.Array):
             self._address.signed[0] = size
         elif isinstance(self._T, lltype.Struct):
-            if isinstance(self._T._flds[self._T._names[-1]], lltype.Array):
+            if self._T._arrayfld is not None:
                 addr = self._address + self._layout[self._T._arrayfld]
                 addr.signed[0] = size
         else:

Modified: pypy/dist/pypy/rpython/memory/simulator.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/simulator.py	(original)
+++ pypy/dist/pypy/rpython/memory/simulator.py	Wed Oct 12 19:57:16 2005
@@ -113,7 +113,8 @@
         return self.blocks[mid]
 
     def malloc(self, size):
-        assert size > 0
+        if size == 0:
+            size = 1
         result = self.freememoryaddress
         self.blocks.append(MemoryBlock(result, size))
         self.freememoryaddress += size

Modified: pypy/dist/pypy/rpython/memory/test/test_gc.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/test/test_gc.py	(original)
+++ pypy/dist/pypy/rpython/memory/test/test_gc.py	Wed Oct 12 19:57:16 2005
@@ -5,7 +5,7 @@
 from pypy.translator.annrpython import RPythonAnnotator
 from pypy.rpython.rtyper import RPythonTyper
 from pypy.rpython.memory.gc import GCError, MarkSweepGC, SemiSpaceGC
-from pypy.rpython.memory.gc import DeferredRefcountingGC
+from pypy.rpython.memory.gc import DeferredRefcountingGC, DummyGC
 from pypy.rpython.memory.support import AddressLinkedList, INT_SIZE
 from pypy.rpython.memory.lladdress import raw_malloc, raw_free, NULL
 from pypy.rpython.memory.simulator import MemorySimulatorError
@@ -138,3 +138,22 @@
     def teardown_class(cls):
         gclltype.prepare_graphs_and_create_gc = cls.prep_old.im_func
         gclltype.use_gc = cls.old
+
+class TestDummyGC(TestMarkSweepGC):
+    def setup_class(cls):
+        gclltype.use_gc = DummyGC
+        cls.old = gclltype.use_gc
+    def teardown_class(cls):
+        gclltype.use_gc = cls.old
+
+class TestDummyGCRunningOnLLinterp(TestMarkSweepGC):
+    def setup_class(cls):
+        cls.prep_old = gclltype.prepare_graphs_and_create_gc
+        gclltype.prepare_graphs_and_create_gc = gclltype.create_gc_run_on_llinterp
+        gclltype.use_gc = DummyGC
+        cls.old = gclltype.use_gc
+
+    def teardown_class(cls):
+        gclltype.prepare_graphs_and_create_gc = cls.prep_old.im_func
+        gclltype.use_gc = cls.old
+

Modified: pypy/dist/pypy/rpython/memory/test/test_lltypesimulation.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/test/test_lltypesimulation.py	(original)
+++ pypy/dist/pypy/rpython/memory/test/test_lltypesimulation.py	Wed Oct 12 19:57:16 2005
@@ -121,6 +121,11 @@
     assert s1.a == 17
     assert s1.rest[3].v == 5
 
+def test_empty_struct():
+    S1 = lltype.GcStruct("s1")
+    s1 = malloc(S1)
+    assert s1 == s1
+
 def test_substructure_ptr():
     S3 = lltype.Struct("s3", ('a', lltype.Signed))
     S2 = lltype.Struct("s2", ('s3', S3), ('char', lltype.Char))



More information about the Pypy-commit mailing list