diff Objects/object.c @ 16385:1fb6672b20ef legacy-trunk

PEP 205, Weak References -- initial checkin.
author Fred Drake <fdrake@acm.org>
date Thu, 01 Feb 2001 05:27:45 +0000
parents e5d59a9dbfc0
children 8466bb37289c
line wrap: on
line diff
--- a/Objects/object.c	Thu Feb 01 05:26:54 2001 +0000
+++ b/Objects/object.c	Thu Feb 01 05:27:45 2001 +0000
@@ -100,6 +100,10 @@
 	/* Any changes should be reflected in PyObject_INIT (objimpl.h) */
 	op->ob_type = tp;
 	_Py_NewReference(op);
+	if (PyType_SUPPORTS_WEAKREFS(tp)) {
+		PyObject **weaklist = PyObject_GET_WEAKREFS_LISTPTR(op);
+		*weaklist = NULL;
+	}
 	return op;
 }
 
@@ -119,6 +123,10 @@
 	op->ob_size = size;
 	op->ob_type = tp;
 	_Py_NewReference((PyObject *)op);
+	if (PyType_SUPPORTS_WEAKREFS(tp)) {
+		PyObject **weaklist = PyObject_GET_WEAKREFS_LISTPTR(op);
+		*weaklist = NULL;
+	}
 	return op;
 }
 
@@ -1458,6 +1466,21 @@
 }
 
 
+/* Hook to clear up weak references only once the _weakref module is
+   imported.  We use a dummy implementation to simplify the code at each
+   call site instead of requiring a test for NULL.
+*/
+
+static int
+empty_clear_weak_refs(PyObject *o)
+{
+    return 1;
+}
+
+int (*PyObject_ClearWeakRefs)(PyObject *) = empty_clear_weak_refs;
+
+
+
 /* These methods are used to control infinite recursion in repr, str, print,
    etc.  Container objects that may recursively contain themselves,
    e.g. builtin dictionaries and lists, should used Py_ReprEnter() and