[Python-checkins] python/dist/src/Include weakrefobject.h,1.4,1.5

fdrake at users.sourceforge.net fdrake at users.sourceforge.net
Fri Jul 2 14:58:19 EDT 2004


Update of /cvsroot/python/python/dist/src/Include
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8493/Include

Modified Files:
	weakrefobject.h 
Log Message:
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.


Index: weakrefobject.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/weakrefobject.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** weakrefobject.h	20 Nov 2003 21:21:45 -0000	1.4
--- weakrefobject.h	2 Jul 2004 18:57:42 -0000	1.5
***************
*** 23,31 ****
  PyAPI_DATA(PyTypeObject) _PyWeakref_CallableProxyType;
  
! #define PyWeakref_CheckRef(op) \
          ((op)->ob_type == &_PyWeakref_RefType)
  #define PyWeakref_CheckProxy(op) \
          (((op)->ob_type == &_PyWeakref_ProxyType) || \
           ((op)->ob_type == &_PyWeakref_CallableProxyType))
  #define PyWeakref_Check(op) \
          (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))
--- 23,36 ----
  PyAPI_DATA(PyTypeObject) _PyWeakref_CallableProxyType;
  
! #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))




More information about the Python-checkins mailing list