[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