summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2004-04-22 17:23:49 (GMT)
committerThomas Heller <theller@ctypes.org>2004-04-22 17:23:49 (GMT)
commit1328b52c6ff3ae128b12be49b430ce859bbd8876 (patch)
treed93fb72929188318596f8f63614721c0701e53a9
parent1a9d32b8d4611dd7c95d1dba1b5d1940cbbe3610 (diff)
downloadcpython-1328b52c6ff3ae128b12be49b430ce859bbd8876.zip
cpython-1328b52c6ff3ae128b12be49b430ce859bbd8876.tar.gz
cpython-1328b52c6ff3ae128b12be49b430ce859bbd8876.tar.bz2
Two new public API functions, Py_IncRef and Py_DecRef. Useful for
dynamic embedders of Python.
-rw-r--r--Doc/api/refcounting.tex5
-rw-r--r--Include/object.h7
-rw-r--r--Misc/NEWS4
-rw-r--r--Objects/object.c12
4 files changed, 28 insertions, 0 deletions
diff --git a/Doc/api/refcounting.tex b/Doc/api/refcounting.tex
index 03530f0..42b9e6a 100644
--- a/Doc/api/refcounting.tex
+++ b/Doc/api/refcounting.tex
@@ -42,6 +42,11 @@ of Python objects.
applies.
\end{cfuncdesc}
+The following functions are for runtime dynamic embedding of Python:
+\cfunction{Py_IncRef(PyObject *o)}, \cfunction{Py_DecRef(PyObject *o)}.
+They are simply exported function versions of \cfunction{Py_XINCREF()} and
+\cfunction{Py_XDECREF()}, respectively.
+
The following functions or macros are only for use within the
interpreter core: \cfunction{_Py_Dealloc()},
\cfunction{_Py_ForgetReference()}, \cfunction{_Py_NewReference()}, as
diff --git a/Include/object.h b/Include/object.h
index f6135ee..555d810 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -625,6 +625,13 @@ PyAPI_FUNC(void) _Py_AddToAllObjects(PyObject *, int force);
#define Py_XDECREF(op) if ((op) == NULL) ; else Py_DECREF(op)
/*
+These are provided as conveniences to Python runtime embedders, so that
+they can have object code that is not dependent on Python compilation flags.
+*/
+PyAPI_FUNC(void) Py_IncRef(PyObject *);
+PyAPI_FUNC(void) Py_DecRef(PyObject *);
+
+/*
_Py_NoneStruct is an object of undefined type which can be used in contexts
where NULL (nil) is not suitable (since NULL often means 'error').
diff --git a/Misc/NEWS b/Misc/NEWS
index b713316..70e37d7 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -471,6 +471,10 @@ Build
C API
-----
+- New public functions Py_IncRef() and Py_DecRef(), exposing the
+ functionality of the Py_XINCREF() and Py_XDECREF macros. Useful for
+ runtime dynamic embedding of Python.
+
- Added a new macro, PySequence_Fast_ITEMS, which retrieves a fast sequence's
underlying array of PyObject pointers. Useful for high speed looping.
diff --git a/Objects/object.c b/Objects/object.c
index ba9a1d9..22196d7 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -146,6 +146,18 @@ _Py_NegativeRefcount(const char *fname, int lineno, PyObject *op)
#endif /* Py_REF_DEBUG */
+void
+Py_IncRef(PyObject *o)
+{
+ Py_XINCREF(o);
+}
+
+void
+Py_DecRef(PyObject *o)
+{
+ Py_XDECREF(o);
+}
+
PyObject *
PyObject_Init(PyObject *op, PyTypeObject *tp)
{