summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2002-07-09 02:57:01 (GMT)
committerTim Peters <tim.peters@gmail.com>2002-07-09 02:57:01 (GMT)
commit7c321a80f93a572a5f4a94d5d2897f70b8315a2c (patch)
treede2d1afbecc9391c3da08afc1cc95996e1ecfa09 /Objects
parentf6caeba03a59944602f7c0eec69c9f275f9608eb (diff)
downloadcpython-7c321a80f93a572a5f4a94d5d2897f70b8315a2c.zip
cpython-7c321a80f93a572a5f4a94d5d2897f70b8315a2c.tar.gz
cpython-7c321a80f93a572a5f4a94d5d2897f70b8315a2c.tar.bz2
The Py_REF_DEBUG/COUNT_ALLOCS/Py_TRACE_REFS macro minefield: added
more trivial lexical helper macros so that uses of these guys expand to nothing at all when they're not enabled. This should help sub- standard compilers that can't do a good job of optimizing away the previous "(void)0" expressions. Py_DECREF: There's only one definition of this now. Yay! That was that last one in the family defined multiple times in an #ifdef maze. Py_FatalError(): Changed the char* signature to const char*. _Py_NegativeRefcount(): New helper function for the Py_REF_DEBUG expansion of Py_DECREF. Calling an external function cuts down on the volume of generated code. The previous inline expansion of abort() didn't work as intended on Windows (the program often kept going, and the error msg scrolled off the screen unseen). _Py_NegativeRefcount calls Py_FatalError instead, which captures our best knowledge of how to abort effectively across platforms.
Diffstat (limited to 'Objects')
-rw-r--r--Objects/object.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/Objects/object.c b/Objects/object.c
index fd069f1..4987ff3 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -91,6 +91,21 @@ inc_count(PyTypeObject *tp)
}
#endif
+#ifdef Py_REF_DEBUG
+/* Log a fatal error; doesn't return. */
+void
+_Py_NegativeRefcount(const char *fname, int lineno, PyObject *op)
+{
+ char buf[300];
+
+ PyOS_snprintf(buf, sizeof(buf),
+ "%s:%i object at %p has negative ref count %i",
+ fname, lineno, op, op->ob_refcnt);
+ Py_FatalError(buf);
+}
+
+#endif /* Py_REF_DEBUG */
+
PyObject *
PyObject_Init(PyObject *op, PyTypeObject *tp)
{