[pypy-commit] pypy gc-del: Fix
arigo
noreply at buildbot.pypy.org
Fri Apr 26 14:24:14 CEST 2013
Author: Armin Rigo <arigo at tunes.org>
Branch: gc-del
Changeset: r63638:00e1300152fb
Date: 2013-04-26 14:22 +0200
http://bitbucket.org/pypy/pypy/changeset/00e1300152fb/
Log: Fix
diff --git a/pypy/interpreter/test/test_typedef.py b/pypy/interpreter/test/test_typedef.py
--- a/pypy/interpreter/test/test_typedef.py
+++ b/pypy/interpreter/test/test_typedef.py
@@ -177,15 +177,17 @@
class W_Level1(W_Root):
def __init__(self, space1):
assert space1 is space
- def __del__(self):
+ self.register_finalizer()
+ def invoke_finalizer(self):
space.call_method(w_seen, 'append', space.wrap(1))
class W_Level2(W_Root):
def __init__(self, space1):
assert space1 is space
- def __del__(self):
- self.enqueue_for_destruction(space, W_Level2.destructormeth,
- 'FOO ')
- def destructormeth(self):
+ self.register_finalizer()
+ def invoke_finalizer(self):
+ self.finalizer_perform(space, 'FOO', self.destructormeth, 42)
+ def destructormeth(self, forty_two):
+ assert forty_two == 42
space.call_method(w_seen, 'append', space.wrap(2))
W_Level1.typedef = typedef.TypeDef(
'level1',
diff --git a/pypy/interpreter/typedef.py b/pypy/interpreter/typedef.py
--- a/pypy/interpreter/typedef.py
+++ b/pypy/interpreter/typedef.py
@@ -223,6 +223,10 @@
if "user" in features: # generic feature needed by all subcls
+ super_invoke_finalizer = supercls.invoke_finalizer.im_func
+ if super_invoke_finalizer == W_Root.invoke_finalizer.im_func:
+ super_invoke_finalizer = lambda self: None
+
class Proto(object):
user_overridden_class = True
@@ -243,11 +247,11 @@
def invoke_finalizer(self):
space = self.space
w_descr = space.lookup(self, '__del__')
- if w_descr is None:
- return
- self.finalizer_perform(self.space, "__del__ method of ",
- space.get_and_call_function,
- w_descr, self)
+ if w_descr is not None:
+ self.finalizer_perform(self.space, "__del__ method of ",
+ space.get_and_call_function,
+ w_descr, self)
+ super_invoke_finalizer(self)
def user_setup_slots(self, nslots):
assert nslots == 0
More information about the pypy-commit
mailing list