[pypy-svn] r51696 - pypy/branch/gc-in-genc/pypy/rpython/memory/gctransform
arigo at codespeak.net
arigo at codespeak.net
Wed Feb 20 16:47:56 CET 2008
Author: arigo
Date: Wed Feb 20 16:47:53 2008
New Revision: 51696
Modified:
pypy/branch/gc-in-genc/pypy/rpython/memory/gctransform/transform.py
Log:
One more test passes.
Modified: pypy/branch/gc-in-genc/pypy/rpython/memory/gctransform/transform.py
==============================================================================
--- pypy/branch/gc-in-genc/pypy/rpython/memory/gctransform/transform.py (original)
+++ pypy/branch/gc-in-genc/pypy/rpython/memory/gctransform/transform.py Wed Feb 20 16:47:53 2008
@@ -648,10 +648,12 @@
and FIELD._gckind == 'gc'):
FIELD = self.get_raw_type_for_gc_type(FIELD)
rawfields.append((name, FIELD))
+ rawname = T._name
else:
rawfields.append(('array', lltype.Array(T.OF)))
+ rawname = 'gcarray'
kwds = {'hints': {'raw_for_gc': True}}
- RAWT = lltype.Struct(T._name, *rawfields, **kwds)
+ RAWT = lltype.Struct(rawname, *rawfields, **kwds)
else:
raise TypeError("not supported by %s: %r" % (
self.__class__.__name__, T))
@@ -678,7 +680,11 @@
# allocate the equivalent raw structure
RAWT = self.get_raw_type_for_gc_type(T)
if T._is_varsize():
- length = container.getlength()
+ if isinstance(T, lltype.Struct):
+ array = container._getattr(T._arrayfld)
+ else:
+ array = container
+ length = array.getlength()
else:
length = None
result = lltype.malloc(RAWT, length, immortal=True)._as_obj()
More information about the Pypy-commit
mailing list