Author: Armin Rigo <ar...@tunes.org> Branch: py3.5 Changeset: r89577:b7305d7e2e07 Date: 2017-01-15 11:26 +0100 http://bitbucket.org/pypy/pypy/changeset/b7305d7e2e07/
Log: officialize a CPython difference diff --git a/lib-python/3/test/test_finalization.py b/lib-python/3/test/test_finalization.py --- a/lib-python/3/test/test_finalization.py +++ b/lib-python/3/test/test_finalization.py @@ -171,7 +171,12 @@ gc.collect() self.assert_del_calls(ids) self.assert_survivors(ids) - self.assertIsNot(wr(), None) + if support.check_impl_detail(): + # CPython >= 3.4 changed this, but not in all cases + # (see the similar test in SelfCycleFinalizationTest). + # PyPy cannot tell apart the two cases, so we picked the + # cycle behavior, as it is the historical one. + self.assertIsNot(wr(), None) self.clear_survivors() gc.collect() self.assert_del_calls(ids) diff --git a/pypy/doc/cpython_differences.rst b/pypy/doc/cpython_differences.rst --- a/pypy/doc/cpython_differences.rst +++ b/pypy/doc/cpython_differences.rst @@ -166,6 +166,13 @@ .. __: https://docs.python.org/2/library/weakref.html .. __: https://bitbucket.org/pypy/pypy/issue/2030/ +A new difference: before CPython 3.4, a weakref to ``x`` was always +cleared before the ``x.__del__()`` method was called. Since CPython 3.4 +the picture is more muddy. Often, the weakref is still alive while +``x.__del__()`` runs, but not always (e.g. not in case of reference +cycles). In PyPy3 we have kept the more consistent pre-3.4 behavior; we +can't do something really different if there are cycles or not. + --------------------------------- There are a few extra implications from the difference in the GC. Most _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit