[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