[pypy-commit] pypy default: One more "I have no clue how it could have worked so far": if some
arigo
pypy.commits at gmail.com
Tue Oct 11 14:19:57 EDT 2016
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r87719:cb834279a539
Date: 2016-10-11 20:19 +0200
http://bitbucket.org/pypy/pypy/changeset/cb834279a539/
Log: One more "I have no clue how it could have worked so far": if some
function is only found via vtables, and it indirectly uses a
destructor, then boom
diff --git a/rpython/memory/gctransform/framework.py b/rpython/memory/gctransform/framework.py
--- a/rpython/memory/gctransform/framework.py
+++ b/rpython/memory/gctransform/framework.py
@@ -679,7 +679,7 @@
#
return newgcdependencies
- def get_finish_tables(self):
+ def enum_type_info_members(self):
# We must first make sure that the type_info_group's members
# are all followed. Do it repeatedly while new members show up.
# Once it is really done, do finish_tables().
@@ -688,6 +688,15 @@
curtotal = len(self.layoutbuilder.type_info_group.members)
yield self.layoutbuilder.type_info_group.members[seen:curtotal]
seen = curtotal
+
+ def get_finish_helpers(self):
+ for dep in self.enum_type_info_members():
+ yield dep
+ yield self.finish_helpers()
+
+ def get_finish_tables(self):
+ for dep in self.enum_type_info_members():
+ yield dep
yield self.finish_tables()
def write_typeid_list(self):
diff --git a/rpython/memory/gctransform/transform.py b/rpython/memory/gctransform/transform.py
--- a/rpython/memory/gctransform/transform.py
+++ b/rpython/memory/gctransform/transform.py
@@ -286,6 +286,9 @@
newgcdependencies = self.ll_finalizers_ptrs
return newgcdependencies
+ def get_finish_helpers(self):
+ return self.finish_helpers
+
def finish_tables(self):
pass
diff --git a/rpython/translator/c/database.py b/rpython/translator/c/database.py
--- a/rpython/translator/c/database.py
+++ b/rpython/translator/c/database.py
@@ -275,7 +275,7 @@
finish_callbacks = []
if self.gctransformer:
finish_callbacks.append(('GC transformer: finished helpers',
- self.gctransformer.finish_helpers))
+ self.gctransformer.get_finish_helpers()))
finish_callbacks.append(('GC transformer: finished tables',
self.gctransformer.get_finish_tables()))
More information about the pypy-commit
mailing list