Index: third_party/cython/src/Cython/Includes/cpython/pycapsule.pxd |
diff --git a/third_party/cython/src/Cython/Includes/cpython/pycapsule.pxd b/third_party/cython/src/Cython/Includes/cpython/pycapsule.pxd |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f0b326bc2cba32402c63a17f5a926a3de70f893d |
--- /dev/null |
+++ b/third_party/cython/src/Cython/Includes/cpython/pycapsule.pxd |
@@ -0,0 +1,146 @@ |
+from cpython.ref cimport PyObject |
+ |
+# available since Python 3.1! |
+ |
+# note all char* in the below functions are actually const char* |
+ |
+cdef extern from "Python.h": |
+ |
+ ctypedef struct PyCapsule_Type |
+ # This subtype of PyObject represents an opaque value, useful for |
+ # C extension modules who need to pass an opaque value (as a void* |
+ # pointer) through Python code to other C code. It is often used |
+ # to make a C function pointer defined in one module available to |
+ # other modules, so the regular import mechanism can be used to |
+ # access C APIs defined in dynamically loaded modules. |
+ |
+ |
+ ctypedef void (*PyCapsule_Destructor)(object o) |
+ # The type of a destructor callback for a capsule. |
+ # |
+ # See PyCapsule_New() for the semantics of PyCapsule_Destructor |
+ # callbacks. |
+ |
+ |
+ bint PyCapsule_CheckExact(object o) |
+ # Return true if its argument is a PyCapsule. |
+ |
+ |
+ object PyCapsule_New(void *pointer, char *name, |
+ PyCapsule_Destructor destructor) |
+ # Return value: New reference. |
+ # |
+ # Create a PyCapsule encapsulating the pointer. The pointer |
+ # argument may not be NULL. |
+ # |
+ # On failure, set an exception and return NULL. |
+ # |
+ # The name string may either be NULL or a pointer to a valid C |
+ # string. If non-NULL, this string must outlive the |
+ # capsule. (Though it is permitted to free it inside the |
+ # destructor.) |
+ # |
+ # If the destructor argument is not NULL, it will be called with |
+ # the capsule as its argument when it is destroyed. |
+ # |
+ # If this capsule will be stored as an attribute of a module, the |
+ # name should be specified as modulename.attributename. This will |
+ # enable other modules to import the capsule using |
+ # PyCapsule_Import(). |
+ |
+ |
+ void* PyCapsule_GetPointer(object capsule, char *name) except? NULL |
+ # Retrieve the pointer stored in the capsule. On failure, set an |
+ # exception and return NULL. |
+ # |
+ # The name parameter must compare exactly to the name stored in |
+ # the capsule. If the name stored in the capsule is NULL, the name |
+ # passed in must also be NULL. Python uses the C function strcmp() |
+ # to compare capsule names. |
+ |
+ |
+ PyCapsule_Destructor PyCapsule_GetDestructor(object capsule) except? NULL |
+ # Return the current destructor stored in the capsule. On failure, |
+ # set an exception and return NULL. |
+ # |
+ # It is legal for a capsule to have a NULL destructor. This makes |
+ # a NULL return code somewhat ambiguous; use PyCapsule_IsValid() |
+ # or PyErr_Occurred() to disambiguate. |
+ |
+ |
+ char* PyCapsule_GetName(object capsule) except? NULL |
+ # Return the current name stored in the capsule. On failure, set |
+ # an exception and return NULL. |
+ # |
+ # It is legal for a capsule to have a NULL name. This makes a NULL |
+ # return code somewhat ambiguous; use PyCapsule_IsValid() or |
+ # PyErr_Occurred() to disambiguate. |
+ |
+ |
+ void* PyCapsule_GetContext(object capsule) except? NULL |
+ # Return the current context stored in the capsule. On failure, |
+ # set an exception and return NULL. |
+ # |
+ # It is legal for a capsule to have a NULL context. This makes a |
+ # NULL return code somewhat ambiguous; use PyCapsule_IsValid() or |
+ # PyErr_Occurred() to disambiguate. |
+ |
+ |
+ bint PyCapsule_IsValid(object capsule, char *name) |
+ # Determines whether or not capsule is a valid capsule. A valid |
+ # capsule is non-NULL, passes PyCapsule_CheckExact(), has a |
+ # non-NULL pointer stored in it, and its internal name matches the |
+ # name parameter. (See PyCapsule_GetPointer() for information on |
+ # how capsule names are compared.) |
+ # |
+ # In other words, if PyCapsule_IsValid() returns a true value, |
+ # calls to any of the accessors (any function starting with |
+ # PyCapsule_Get()) are guaranteed to succeed. |
+ # |
+ # Return a nonzero value if the object is valid and matches the |
+ # name passed in. Return 0 otherwise. This function will not fail. |
+ |
+ |
+ int PyCapsule_SetPointer(object capsule, void *pointer) except -1 |
+ # Set the void pointer inside capsule to pointer. The pointer may |
+ # not be NULL. |
+ # |
+ # Return 0 on success. Return nonzero and set an exception on |
+ # failure. |
+ |
+ |
+ int PyCapsule_SetDestructor(object capsule, PyCapsule_Destructor destructor) except -1 |
+ # Set the destructor inside capsule to destructor. |
+ # |
+ # Return 0 on success. Return nonzero and set an exception on |
+ # failure. |
+ |
+ |
+ int PyCapsule_SetName(object capsule, char *name) except -1 |
+ # Set the name inside capsule to name. If non-NULL, the name must |
+ # outlive the capsule. If the previous name stored in the capsule |
+ # was not NULL, no attempt is made to free it. |
+ # |
+ # Return 0 on success. Return nonzero and set an exception on |
+ # failure. |
+ |
+ |
+ int PyCapsule_SetContext(object capsule, void *context) except -1 |
+ # Set the context pointer inside capsule to context. Return 0 on |
+ # success. Return nonzero and set an exception on failure. |
+ |
+ |
+ void* PyCapsule_Import(char *name, int no_block) except? NULL |
+ # Import a pointer to a C object from a capsule attribute in a |
+ # module. The name parameter should specify the full name to the |
+ # attribute, as in module.attribute. The name stored in the |
+ # capsule must match this string exactly. If no_block is true, |
+ # import the module without blocking (using |
+ # PyImport_ImportModuleNoBlock()). If no_block is false, import |
+ # the module conventionally (using PyImport_ImportModule()). |
+ # |
+ # Return the capsule’s internal pointer on success. On failure, |
+ # set an exception and return NULL. However, if PyCapsule_Import() |
+ # failed to import the module, and no_block was true, no exception |
+ # is set. |
+ |