Index: third_party/cython/src/Cython/Includes/cpython/ref.pxd |
diff --git a/third_party/cython/src/Cython/Includes/cpython/ref.pxd b/third_party/cython/src/Cython/Includes/cpython/ref.pxd |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f41c9a5dcd0838d7fa8c82f0e52123d7209e78c7 |
--- /dev/null |
+++ b/third_party/cython/src/Cython/Includes/cpython/ref.pxd |
@@ -0,0 +1,56 @@ |
+cdef extern from "Python.h": |
+ ctypedef struct PyTypeObject |
+ ctypedef struct PyObject: |
+ Py_ssize_t ob_refcnt |
+ PyTypeObject *ob_type |
+ cdef PyTypeObject *Py_TYPE(object) |
+ |
+ |
+ ##################################################################### |
+ # 3. Reference Counts |
+ ##################################################################### |
+ # The macros in this section are used for managing reference counts of Python objects. |
+ void Py_INCREF(object o) |
+ # Increment the reference count for object o. The object must not |
+ # be NULL; if you aren't sure that it isn't NULL, use |
+ # Py_XINCREF(). |
+ |
+ void Py_XINCREF(PyObject* o) |
+ # Increment the reference count for object o. The object may be NULL, in which case the macro has no effect. |
+ |
+ void Py_DECREF(object o) |
+ # Decrement the reference count for object o. The object must not |
+ # be NULL; if you aren't sure that it isn't NULL, use |
+ # Py_XDECREF(). If the reference count reaches zero, the object's |
+ # type's deallocation function (which must not be NULL) is |
+ # invoked. |
+ |
+ # Warning: The deallocation function can cause arbitrary Python |
+ # code to be invoked (e.g. when a class instance with a __del__() |
+ # method is deallocated). While exceptions in such code are not |
+ # propagated, the executed code has free access to all Python |
+ # global variables. This means that any object that is reachable |
+ # from a global variable should be in a consistent state before |
+ # Py_DECREF() is invoked. For example, code to delete an object |
+ # from a list should copy a reference to the deleted object in a |
+ # temporary variable, update the list data structure, and then |
+ # call Py_DECREF() for the temporary variable. |
+ |
+ void Py_XDECREF(PyObject* o) |
+ # Decrement the reference count for object o. The object may be |
+ # NULL, in which case the macro has no effect; otherwise the |
+ # effect is the same as for Py_DECREF(), and the same warning |
+ # applies. |
+ |
+ void Py_CLEAR(PyObject* o) |
+ # Decrement the reference count for object o. The object may be |
+ # NULL, in which case the macro has no effect; otherwise the |
+ # effect is the same as for Py_DECREF(), except that the argument |
+ # is also set to NULL. The warning for Py_DECREF() does not apply |
+ # with respect to the object passed because the macro carefully |
+ # uses a temporary variable and sets the argument to NULL before |
+ # decrementing its reference count. |
+ # It is a good idea to use this macro whenever decrementing the |
+ # value of a variable that might be traversed during garbage |
+ # collection. |
+ |