diff options
author | Fred Drake <fdrake@acm.org> | 2004-07-02 18:57:45 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2004-07-02 18:57:45 (GMT) |
commit | 0a4dd390bf653128de8bc2e99da64967c8cdf86e (patch) | |
tree | 9c3b3989bc85eda1277464459cda1eae87f5d7a5 /Include | |
parent | 813914049de32303ce31cae11abe9c5a49a08a4e (diff) | |
download | cpython-0a4dd390bf653128de8bc2e99da64967c8cdf86e.zip cpython-0a4dd390bf653128de8bc2e99da64967c8cdf86e.tar.gz cpython-0a4dd390bf653128de8bc2e99da64967c8cdf86e.tar.bz2 |
Make weak references subclassable:
- weakref.ref and weakref.ReferenceType will become aliases for each
other
- weakref.ref will be a modern, new-style class with proper __new__
and __init__ methods
- weakref.WeakValueDictionary will have a lighter memory footprint,
using a new weakref.ref subclass to associate the key with the
value, allowing us to have only a single object of overhead for each
dictionary entry (currently, there are 3 objects of overhead per
entry: a weakref to the value, a weakref to the dictionary, and a
function object used as a weakref callback; the weakref to the
dictionary could be avoided without this change)
- a new macro, PyWeakref_CheckRefExact(), will be added
- PyWeakref_CheckRef() will check for subclasses of weakref.ref
This closes SF patch #983019.
Diffstat (limited to 'Include')
-rw-r--r-- | Include/weakrefobject.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/Include/weakrefobject.h b/Include/weakrefobject.h index effa0ed..3503892 100644 --- a/Include/weakrefobject.h +++ b/Include/weakrefobject.h @@ -22,11 +22,16 @@ PyAPI_DATA(PyTypeObject) _PyWeakref_RefType; PyAPI_DATA(PyTypeObject) _PyWeakref_ProxyType; PyAPI_DATA(PyTypeObject) _PyWeakref_CallableProxyType; -#define PyWeakref_CheckRef(op) \ +#define PyWeakref_CheckRef(op) PyObject_TypeCheck(op, &_PyWeakref_RefType) +#define PyWeakref_CheckRefExact(op) \ ((op)->ob_type == &_PyWeakref_RefType) #define PyWeakref_CheckProxy(op) \ (((op)->ob_type == &_PyWeakref_ProxyType) || \ ((op)->ob_type == &_PyWeakref_CallableProxyType)) + +/* This macro calls PyWeakref_CheckRef() last since that can involve a + function call; this makes it more likely that the function call + will be avoided. */ #define PyWeakref_Check(op) \ (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op)) |