[pypy-svn] r27377 - in pypy/dist/pypy/rpython/lltypesystem: . test
pedronis at codespeak.net
pedronis at codespeak.net
Wed May 17 22:59:18 CEST 2006
Author: pedronis
Date: Wed May 17 22:59:17 2006
New Revision: 27377
Modified:
pypy/dist/pypy/rpython/lltypesystem/llmemory.py
pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py
Log:
another test, an xxx
Modified: pypy/dist/pypy/rpython/lltypesystem/llmemory.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/llmemory.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/llmemory.py Wed May 17 22:59:17 2006
@@ -499,8 +499,9 @@
return size.raw_malloc([])
def raw_free(adr):
+ # xxx crash if you get only the header of a gc object
assert isinstance(adr.ob._obj, lltype._parentable)
- adr.ob._obj._free()
+ adr.ob._as_obj()._free()
def raw_malloc_usage(size):
if isinstance(size, AddressOffset):
Modified: pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py Wed May 17 22:59:17 2006
@@ -339,7 +339,59 @@
py.test.raises(RuntimeError, "p_u.y = 2")
repr(adr)
str(p_u)
+
+def test_raw_free_with_hdr():
+ from pypy.rpython.memory.gcheader import GCHeaderBuilder
+
+ HDR = lltype.Struct('h', ('t', lltype.Signed))
+ gh = GCHeaderBuilder(HDR).size_gc_header
+
+ A = lltype.GcArray(lltype.Signed)
+ adr = raw_malloc(gh+sizeof(A, 10))
+ p_a = cast_adr_to_ptr(adr+gh, lltype.Ptr(A))
+ p_a[0] = 1
+ adr = cast_ptr_to_adr(p_a)-gh
+ raw_free(adr)
+ py.test.raises(RuntimeError, "p_a[0]")
+ py.test.raises(RuntimeError, "p_a[0] = 2")
+ repr(adr)
+ str(p_a)
+
+ S = lltype.GcStruct('S', ('x', lltype.Signed))
+ adr = raw_malloc(gh+sizeof(S))
+ p_s = cast_adr_to_ptr(adr+gh, lltype.Ptr(S))
+ p_s.x = 1
+ adr = cast_ptr_to_adr(p_s)-gh
+ raw_free(adr)
+ py.test.raises(RuntimeError, "p_s.x")
+ py.test.raises(RuntimeError, "p_s.x = 2")
+ repr(adr)
+ str(p_s)
+ T = lltype.GcStruct('T', ('s', S))
+ adr = raw_malloc(gh+sizeof(T))
+ p_s = cast_adr_to_ptr(adr+gh, lltype.Ptr(S))
+ p_s.x = 1
+ adr = cast_ptr_to_adr(p_s)-gh
+ raw_free(adr)
+ py.test.raises(RuntimeError, "p_s.x")
+ py.test.raises(RuntimeError, "p_s.x = 2")
+ repr(adr)
+ str(p_s)
+
+ U = lltype.Struct('U', ('y', lltype.Signed))
+ T = lltype.GcStruct('T', ('x', lltype.Signed), ('u', U))
+ adr = raw_malloc(gh+sizeof(T))
+ p_t = cast_adr_to_ptr(adr+gh, lltype.Ptr(T))
+ p_u = p_t.u
+ p_u.y = 1
+ adr = cast_ptr_to_adr(p_t)-gh
+ raw_free(adr)
+ py.test.raises(RuntimeError, "p_u.y")
+ py.test.raises(RuntimeError, "p_u.y = 2")
+ repr(adr)
+ str(p_u)
+
def test_inlined_substruct():
T = lltype.Struct('T', ('x', lltype.Signed))
S1 = lltype.GcStruct('S1', ('t1', T), ('t2', T))
More information about the Pypy-commit
mailing list