mirror of https://github.com/python/cpython
Fix SF 762891: "del p[key]" on proxy object raises SystemError()
This commit is contained in:
parent
562a855da0
commit
d693a81595
|
@ -226,6 +226,17 @@ class ReferencesTestCase(TestBase):
|
|||
self.assert_(not hasattr(o, 'foo'),
|
||||
"object does not reflect attribute removal via proxy")
|
||||
|
||||
def test_proxy_deletion(self):
|
||||
# Test clearing of SF bug #762891
|
||||
class Foo:
|
||||
result = None
|
||||
def __delitem__(self, accessor):
|
||||
self.result = accessor
|
||||
g = Foo()
|
||||
f = weakref.proxy(g)
|
||||
del f[0]
|
||||
self.assertEqual(f.result, 0)
|
||||
|
||||
def test_getweakrefcount(self):
|
||||
o = C()
|
||||
ref1 = weakref.ref(o)
|
||||
|
|
33
Misc/NEWS
33
Misc/NEWS
|
@ -4,6 +4,39 @@ Python News
|
|||
|
||||
(editors: check NEWS.help for information about editing NEWS using ReST.)
|
||||
|
||||
What's New in Python 2.3 release candidate?
|
||||
===========================================
|
||||
|
||||
Core and builtins
|
||||
-----------------
|
||||
|
||||
Extension modules
|
||||
-----------------
|
||||
|
||||
- weakref.proxy() can now handle "del obj[i]" for proxy objects
|
||||
defining __delitem__. Formerly, it generated a SystemError.
|
||||
|
||||
- SSL no longer crashes the interpreter when the remote side disconnects.
|
||||
|
||||
Library
|
||||
-------
|
||||
|
||||
Tools/Demos
|
||||
-----------
|
||||
|
||||
Build
|
||||
-----
|
||||
|
||||
C API
|
||||
-----
|
||||
|
||||
Windows
|
||||
-------
|
||||
|
||||
Mac
|
||||
---
|
||||
|
||||
|
||||
What's New in Python 2.3 beta 2?
|
||||
================================
|
||||
|
||||
|
|
|
@ -389,7 +389,11 @@ proxy_setitem(PyWeakReference *proxy, PyObject *key, PyObject *value)
|
|||
{
|
||||
if (!proxy_checkref(proxy))
|
||||
return -1;
|
||||
return PyObject_SetItem(PyWeakref_GET_OBJECT(proxy), key, value);
|
||||
|
||||
if (value == NULL)
|
||||
return PyObject_DelItem(PyWeakref_GET_OBJECT(proxy), key);
|
||||
else
|
||||
return PyObject_SetItem(PyWeakref_GET_OBJECT(proxy), key, value);
|
||||
}
|
||||
|
||||
/* iterator slots */
|
||||
|
|
Loading…
Reference in New Issue