diff options
author | Fred Drake <fdrake@acm.org> | 2001-02-02 18:17:30 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2001-02-02 18:17:30 (GMT) |
commit | 033f31270cb424efdb72abb03d925235f18d034d (patch) | |
tree | e5947972e470b7174e668a9e32f35e4c9429503b /Include | |
parent | 26d1f1443300526afe3b63fe9c5c7ef4f6a5e33d (diff) | |
download | cpython-033f31270cb424efdb72abb03d925235f18d034d.zip cpython-033f31270cb424efdb72abb03d925235f18d034d.tar.gz cpython-033f31270cb424efdb72abb03d925235f18d034d.tar.bz2 |
Use a type flag to determine the applicability of the tp_weaklistoffset
field. This should avoid binary incompatibility problems with older modules
that have not been recompiled.
Diffstat (limited to 'Include')
-rw-r--r-- | Include/object.h | 7 | ||||
-rw-r--r-- | Include/objimpl.h | 4 |
2 files changed, 10 insertions, 1 deletions
diff --git a/Include/object.h b/Include/object.h index 972e05b..2f683eb 100644 --- a/Include/object.h +++ b/Include/object.h @@ -344,11 +344,18 @@ given type object has a specified feature. #define Py_TPFLAGS_HAVE_RICHCOMPARE (1L<<5) +/* Objects which are weakly referencable if their tp_weaklistoffset is >0 */ +/* XXX Should this have the same value as Py_TPFLAGS_HAVE_RICHCOMPARE? + * These both indicate a feature that appeared in the same alpha release. + */ +#define Py_TPFLAGS_HAVE_WEAKREFS (1L<<6) + #define Py_TPFLAGS_DEFAULT ( \ Py_TPFLAGS_HAVE_GETCHARBUFFER | \ Py_TPFLAGS_HAVE_SEQUENCE_IN | \ Py_TPFLAGS_HAVE_INPLACEOPS | \ Py_TPFLAGS_HAVE_RICHCOMPARE | \ + Py_TPFLAGS_HAVE_WEAKREFS | \ 0) #define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0) diff --git a/Include/objimpl.h b/Include/objimpl.h index 93c5b23..9c13e71 100644 --- a/Include/objimpl.h +++ b/Include/objimpl.h @@ -271,7 +271,9 @@ extern DL_IMPORT(void) _PyGC_Dump(PyGC_Head *); #endif /* WITH_CYCLE_GC */ /* Test if a type supports weak references */ -#define PyType_SUPPORTS_WEAKREFS(t) ((t)->tp_weaklistoffset > 0) +#define PyType_SUPPORTS_WEAKREFS(t) \ + (PyType_HasFeature((t), Py_TPFLAGS_HAVE_WEAKREFS) \ + && ((t)->tp_weaklistoffset > 0)) #define PyObject_GET_WEAKREFS_LISTPTR(o) \ ((PyObject **) (((char *) (o)) + (o)->ob_type->tp_weaklistoffset)) |