diff options
author | Victor Stinner <vstinner@redhat.com> | 2019-04-12 19:51:34 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-12 19:51:34 (GMT) |
commit | 0fc91eef34a1d9194904fa093c9fbd711af0f26c (patch) | |
tree | beec907827203135c5c5baa9303fcb27776088a3 /Include | |
parent | 23a683adf803eef405d248cc9c2a7eb08a7300e2 (diff) | |
download | cpython-0fc91eef34a1d9194904fa093c9fbd711af0f26c.zip cpython-0fc91eef34a1d9194904fa093c9fbd711af0f26c.tar.gz cpython-0fc91eef34a1d9194904fa093c9fbd711af0f26c.tar.bz2 |
bpo-36389: Add _PyObject_CheckConsistency() function (GH-12803)
Add a new _PyObject_CheckConsistency() function which can be used to
help debugging. The function is available in release mode.
Add a 'check_content' parameter to _PyDict_CheckConsistency().
Diffstat (limited to 'Include')
-rw-r--r-- | Include/cpython/object.h | 15 | ||||
-rw-r--r-- | Include/internal/pycore_object.h | 4 |
2 files changed, 19 insertions, 0 deletions
diff --git a/Include/cpython/object.h b/Include/cpython/object.h index 64d196a..ba52a48 100644 --- a/Include/cpython/object.h +++ b/Include/cpython/object.h @@ -446,6 +446,21 @@ PyAPI_FUNC(void) _PyObject_AssertFailed( int line, const char *function); +/* Check if an object is consistent. For example, ensure that the reference + counter is greater than or equal to 1, and ensure that ob_type is not NULL. + + Call _PyObject_AssertFailed() if the object is inconsistent. + + If check_content is zero, only check header fields: reduce the overhead. + + The function always return 1. The return value is just here to be able to + write: + + assert(_PyObject_CheckConsistency(obj, 1)); */ +PyAPI_FUNC(int) _PyObject_CheckConsistency( + PyObject *op, + int check_content); + #ifdef __cplusplus } #endif diff --git a/Include/internal/pycore_object.h b/Include/internal/pycore_object.h index a88b626..c955953 100644 --- a/Include/internal/pycore_object.h +++ b/Include/internal/pycore_object.h @@ -10,6 +10,10 @@ extern "C" { #include "pycore_pystate.h" /* _PyRuntime */ +PyAPI_FUNC(int) _PyType_CheckConsistency(PyTypeObject *type); +PyAPI_FUNC(int) _PyUnicode_CheckConsistency(PyObject *op, int check_content); +PyAPI_FUNC(int) _PyDict_CheckConsistency(PyObject *mp, int check_content); + /* Tell the GC to track this object. * * NB: While the object is tracked by the collector, it must be safe to call the |