[pypy-svn] r15712 - in pypy/dist/pypy/rpython/memory: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Sat Aug 6 00:50:11 CEST 2005
Author: cfbolz
Date: Sat Aug 6 00:50:09 2005
New Revision: 15712
Modified:
pypy/dist/pypy/rpython/memory/convertlltype.py
pypy/dist/pypy/rpython/memory/test/test_convertlltype.py
Log:
fixed convert_struct for variable sized structs
Modified: pypy/dist/pypy/rpython/memory/convertlltype.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/convertlltype.py (original)
+++ pypy/dist/pypy/rpython/memory/convertlltype.py Sat Aug 6 00:50:09 2005
@@ -56,7 +56,11 @@
return address
TYPE = lltype.typeOf(_struct)
layout = get_layout(TYPE)
- size = get_total_size(TYPE)
+ if TYPE._arrayfld is not None:
+ inlinedarraylength = len(getattr(_struct, TYPE._arrayfld).items)
+ size = get_total_size(TYPE, inlinedarraylength)
+ else:
+ size = get_total_size(TYPE)
if inline_to_addr is not None:
startaddr = inline_to_addr
else:
Modified: pypy/dist/pypy/rpython/memory/test/test_convertlltype.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/test/test_convertlltype.py (original)
+++ pypy/dist/pypy/rpython/memory/test/test_convertlltype.py Sat Aug 6 00:50:09 2005
@@ -87,5 +87,18 @@
a = cvter.convert(lla)
assert a[0].a[1].a[2].a == a
assert [a[i].b for i in range(3)] == [1, 2, 3]
+
+def test_varsize_struct():
+ cvter = LLTypeConverter(lladdress.raw_malloc(1000))
+ A = lltype.Array(lltype.Signed)
+ S = lltype.GcStruct("name", ("v", lltype.Signed), ("a", A))
+ lls = lltype.malloc(S, 3)
+ lls.a[0] = 1
+ lls.a[1] = 2
+ lls.a[2] = 3
+ lls.v = 4
+ s = cvter.convert(lls)
+ assert [s.a[i] for i in range(3)] == [1, 2, 3]
+ assert s.v == 4
More information about the Pypy-commit
mailing list