[pypy-svn] r69001 - in pypy/branch/gc-dump-malloc/pypy: rpython/lltypesystem rpython/memory translator/c translator/c/src

arigo at codespeak.net arigo at codespeak.net
Thu Nov 5 20:05:00 CET 2009


Author: arigo
Date: Thu Nov  5 20:04:59 2009
New Revision: 69001

Modified:
   pypy/branch/gc-dump-malloc/pypy/rpython/lltypesystem/llgroup.py
   pypy/branch/gc-dump-malloc/pypy/rpython/memory/gctypelayout.py
   pypy/branch/gc-dump-malloc/pypy/translator/c/node.py
   pypy/branch/gc-dump-malloc/pypy/translator/c/src/main.h
Log:
Quick hacks to print the result at the end of the C program.


Modified: pypy/branch/gc-dump-malloc/pypy/rpython/lltypesystem/llgroup.py
==============================================================================
--- pypy/branch/gc-dump-malloc/pypy/rpython/lltypesystem/llgroup.py	(original)
+++ pypy/branch/gc-dump-malloc/pypy/rpython/lltypesystem/llgroup.py	Thu Nov  5 20:04:59 2009
@@ -21,8 +21,9 @@
     def __init__(self, name):
         self.name = name
         self.members = []
+        self.extrainfos = []
 
-    def add_member(self, structptr):
+    def add_member(self, structptr, extrainfo=None):
         TYPE = lltype.typeOf(structptr)
         assert isinstance(TYPE.TO, lltype.Struct)
         assert TYPE.TO._gckind == 'raw'
@@ -34,6 +35,7 @@
         assert struct._parentstructure() is None
         index = len(self.members)
         self.members.append(struct)
+        self.extrainfos.append(extrainfo)
         _membership[struct] = self
         return GroupMemberOffset(self, index)
 

Modified: pypy/branch/gc-dump-malloc/pypy/rpython/memory/gctypelayout.py
==============================================================================
--- pypy/branch/gc-dump-malloc/pypy/rpython/memory/gctypelayout.py	(original)
+++ pypy/branch/gc-dump-malloc/pypy/rpython/memory/gctypelayout.py	Thu Nov  5 20:04:59 2009
@@ -20,11 +20,11 @@
 
     # structure describing the layout of a typeid
     TYPE_INFO = lltype.Struct("type_info",
+        ("counter",        lltype.Signed),
         ("infobits",       lltype.Signed),    # combination of the T_xxx consts
         ("finalizer",      FINALIZERTYPE),
         ("fixedsize",      lltype.Signed),
         ("ofstoptrs",      lltype.Ptr(OFFSETS_TO_GC_PTR)),
-        ("counter",        lltype.Signed),
         hints={'immutable': True},
         )
     VARSIZE_TYPE_INFO = lltype.Struct("varsize_type_info",
@@ -223,7 +223,7 @@
             else:
                 self._pending_type_shapes.append((info, TYPE))
             # store it
-            type_id = self.type_info_group.add_member(fullinfo)
+            type_id = self.type_info_group.add_member(fullinfo, str(TYPE))
             self.id_of_type[TYPE] = type_id
             self.add_vtable_after_typeinfo(TYPE)
             return type_id

Modified: pypy/branch/gc-dump-malloc/pypy/translator/c/node.py
==============================================================================
--- pypy/branch/gc-dump-malloc/pypy/translator/c/node.py	(original)
+++ pypy/branch/gc-dump-malloc/pypy/translator/c/node.py	Thu Nov  5 20:04:59 2009
@@ -992,6 +992,16 @@
             structnode = self.db.getcontainernode(member)
             yield '#define %s %s.member%d' % (structnode.name,
                                               self.name, i)
+        # <hack>
+        from pypy.translator.c.support import c_string_constant
+        yield '#define DUMP_GROUP_INFO \\'
+        for i, extrainfo in enumerate(self.obj.extrainfos):
+            if extrainfo:
+                text = '\tdump_group_info(%s, (long*)(&%s.member%d)); \\' % (
+                    c_string_constant(extrainfo), self.name, i)
+                yield text.replace('\n', '\\\n')
+        yield '\t;'
+        # </hack>
         yield ''
 
     def initializationexpr(self):

Modified: pypy/branch/gc-dump-malloc/pypy/translator/c/src/main.h
==============================================================================
--- pypy/branch/gc-dump-malloc/pypy/translator/c/src/main.h	(original)
+++ pypy/branch/gc-dump-malloc/pypy/translator/c/src/main.h	Thu Nov  5 20:04:59 2009
@@ -15,6 +15,12 @@
 
 #ifndef PYPY_NOT_MAIN_FILE
 
+void dump_group_info(const char *typename, long *counter)
+{
+  if (*counter)
+    fprintf(stderr, "|%12lu  %s\n", (unsigned long)*counter, typename);
+}
+
 int main(int argc, char *argv[])
 {
     char *errmsg;
@@ -35,6 +41,7 @@
     }
 
     exitcode = STANDALONE_ENTRY_POINT(list);
+    DUMP_GROUP_INFO
     if (RPyExceptionOccurred()) {
         /* fish for the exception type, at least */
 #ifndef AVR



More information about the Pypy-commit mailing list