[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