[Python-checkins] r73729 - in python/branches/py3k: Doc/c-api/cobject.rst Include/Python.h Include/cobject.h Makefile.pre.in Misc/NEWS Objects/cobject.c

benjamin.peterson python-checkins at python.org
Wed Jul 1 03:28:55 CEST 2009


Author: benjamin.peterson
Date: Wed Jul  1 03:28:55 2009
New Revision: 73729

Log:
remove PyCObject

Removed:
   python/branches/py3k/Doc/c-api/cobject.rst
   python/branches/py3k/Include/cobject.h
   python/branches/py3k/Objects/cobject.c
Modified:
   python/branches/py3k/Include/Python.h
   python/branches/py3k/Makefile.pre.in
   python/branches/py3k/Misc/NEWS

Deleted: python/branches/py3k/Doc/c-api/cobject.rst
==============================================================================
--- python/branches/py3k/Doc/c-api/cobject.rst	Wed Jul  1 03:28:55 2009
+++ (empty file)
@@ -1,59 +0,0 @@
-.. highlightlang:: c
-
-.. _cobjects:
-
-CObjects
---------
-
-.. index:: object: CObject
-
-
-.. warning::
-
-   The CObject API is deprecated as of Python 3.1.  Please switch to the new
-   :ref:`capsules` API.
-
-.. ctype:: PyCObject
-
-   This subtype of :ctype:`PyObject` represents an opaque value, useful for C
-   extension modules who need to pass an opaque value (as a :ctype:`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.
-
-
-.. cfunction:: int PyCObject_Check(PyObject *p)
-
-   Return true if its argument is a :ctype:`PyCObject`.
-
-
-.. cfunction:: PyObject* PyCObject_FromVoidPtr(void* cobj, void (*destr)(void *))
-
-   Create a :ctype:`PyCObject` from the ``void *`` *cobj*.  The *destr* function
-   will be called when the object is reclaimed, unless it is *NULL*.
-
-
-.. cfunction:: PyObject* PyCObject_FromVoidPtrAndDesc(void* cobj, void* desc, void (*destr)(void *, void *))
-
-   Create a :ctype:`PyCObject` from the :ctype:`void \*` *cobj*.  The *destr*
-   function will be called when the object is reclaimed. The *desc* argument can
-   be used to pass extra callback data for the destructor function.
-
-
-.. cfunction:: void* PyCObject_AsVoidPtr(PyObject* self)
-
-   Return the object :ctype:`void \*` that the :ctype:`PyCObject` *self* was
-   created with.
-
-
-.. cfunction:: void* PyCObject_GetDesc(PyObject* self)
-
-   Return the description :ctype:`void \*` that the :ctype:`PyCObject` *self* was
-   created with.
-
-
-.. cfunction:: int PyCObject_SetVoidPtr(PyObject* self, void* cobj)
-
-   Set the void pointer inside *self* to *cobj*. The :ctype:`PyCObject` must not
-   have an associated destructor. Return true on success, false on failure.

Modified: python/branches/py3k/Include/Python.h
==============================================================================
--- python/branches/py3k/Include/Python.h	(original)
+++ python/branches/py3k/Include/Python.h	Wed Jul  1 03:28:55 2009
@@ -88,7 +88,6 @@
 #include "funcobject.h"
 #include "classobject.h"
 #include "fileobject.h"
-#include "cobject.h"
 #include "pycapsule.h"
 #include "traceback.h"
 #include "sliceobject.h"

Deleted: python/branches/py3k/Include/cobject.h
==============================================================================
--- python/branches/py3k/Include/cobject.h	Wed Jul  1 03:28:55 2009
+++ (empty file)
@@ -1,61 +0,0 @@
-
-/* 
- 
-The CObject module is now *deprecated* as of Python 3.1.
-Please use the Capsule API instead; see "pycapsule.h".
-
-*/
-
-#ifndef Py_COBJECT_H
-#define Py_COBJECT_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-PyAPI_DATA(PyTypeObject) PyCObject_Type;
-
-#define PyCObject_Check(op) (Py_TYPE(op) == &PyCObject_Type)
-
-/* Create a PyCObject from a pointer to a C object and an optional
-   destructor function.  If the second argument is non-null, then it
-   will be called with the first argument if and when the PyCObject is
-   destroyed.
-
-*/
-PyAPI_FUNC(PyObject *) PyCObject_FromVoidPtr(
-	void *cobj, void (*destruct)(void*));
-
-
-/* Create a PyCObject from a pointer to a C object, a description object,
-   and an optional destructor function.  If the third argument is non-null,
-   then it will be called with the first and second arguments if and when 
-   the PyCObject is destroyed.
-*/
-PyAPI_FUNC(PyObject *) PyCObject_FromVoidPtrAndDesc(
-	void *cobj, void *desc, void (*destruct)(void*,void*));
-
-/* Retrieve a pointer to a C object from a PyCObject. */
-PyAPI_FUNC(void *) PyCObject_AsVoidPtr(PyObject *);
-
-/* Retrieve a pointer to a description object from a PyCObject. */
-PyAPI_FUNC(void *) PyCObject_GetDesc(PyObject *);
-
-/* Import a pointer to a C object from a module using a PyCObject. */
-PyAPI_FUNC(void *) PyCObject_Import(char *module_name, char *cobject_name);
-
-/* Modify a C object. Fails (==0) if object has a destructor. */
-PyAPI_FUNC(int) PyCObject_SetVoidPtr(PyObject *self, void *cobj);
-
-
-typedef struct {
-    PyObject_HEAD
-    void *cobject;
-    void *desc;
-    void (*destructor)(void *);
-} PyCObject;
-
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* !Py_COBJECT_H */

Modified: python/branches/py3k/Makefile.pre.in
==============================================================================
--- python/branches/py3k/Makefile.pre.in	(original)
+++ python/branches/py3k/Makefile.pre.in	Wed Jul  1 03:28:55 2009
@@ -327,7 +327,6 @@
 		Objects/bytesobject.o \
 		Objects/cellobject.o \
 		Objects/classobject.o \
-		Objects/cobject.o \
 		Objects/codeobject.o \
 		Objects/complexobject.o \
 		Objects/descrobject.o \
@@ -622,7 +621,6 @@
 		Include/cellobject.h \
 		Include/ceval.h \
 		Include/classobject.h \
-		Include/cobject.h \
 		Include/code.h \
 		Include/codecs.h \
 		Include/compile.h \

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Wed Jul  1 03:28:55 2009
@@ -12,6 +12,8 @@
 Core and Builtins
 -----------------
 
+- The deprecated PyCObject has been removed.
+
 - Issue #6347: Include inttypes.h as well as stdint.h in pyport.h.
   This fixes a build failure on HP-UX: int32_t and uint32_t are
   defined in inttypes.h instead of stdint.h on that platform.

Deleted: python/branches/py3k/Objects/cobject.c
==============================================================================
--- python/branches/py3k/Objects/cobject.c	Wed Jul  1 03:28:55 2009
+++ (empty file)
@@ -1,169 +0,0 @@
-
-/* Wrap void* pointers to be passed between C modules */
-
-#include "Python.h"
-
-
-/* Declarations for objects of type PyCObject */
-
-typedef void (*destructor1)(void *);
-typedef void (*destructor2)(void *, void*);
-
-
-static int deprecation_exception(void)
-{
-    return PyErr_WarnEx(PyExc_PendingDeprecationWarning,
-             "The CObject API is deprecated as of Python 3.1.  "
-             "Please convert to using the Capsule API.", 1);
-}
-
-PyObject *
-PyCObject_FromVoidPtr(void *cobj, void (*destr)(void *))
-{
-    PyCObject *self;
-
-    if (deprecation_exception()) {
-        return NULL;
-    }
-
-    self = PyObject_NEW(PyCObject, &PyCObject_Type);
-    if (self == NULL)
-        return NULL;
-    self->cobject=cobj;
-    self->destructor=destr;
-    self->desc=NULL;
-
-    return (PyObject *)self;
-}
-
-PyObject *
-PyCObject_FromVoidPtrAndDesc(void *cobj, void *desc,
-                             void (*destr)(void *, void *))
-{
-    PyCObject *self;
-
-    if (deprecation_exception()) {
-        return NULL;
-    }
-
-    if (!desc) {
-        PyErr_SetString(PyExc_TypeError,
-                        "PyCObject_FromVoidPtrAndDesc called with null"
-                        " description");
-        return NULL;
-    }
-    self = PyObject_NEW(PyCObject, &PyCObject_Type);
-    if (self == NULL)
-        return NULL;
-    self->cobject = cobj;
-    self->destructor = (destructor1)destr;
-    self->desc = desc;
-
-    return (PyObject *)self;
-}
-
-void *
-PyCObject_AsVoidPtr(PyObject *self)
-{
-    if (self) {
-        if (self->ob_type == &PyCObject_Type)
-            return ((PyCObject *)self)->cobject;
-        PyErr_SetString(PyExc_TypeError,
-                        "PyCObject_AsVoidPtr with non-C-object");
-    }
-    if (!PyErr_Occurred())
-        PyErr_SetString(PyExc_TypeError,
-                        "PyCObject_AsVoidPtr called with null pointer");
-    return NULL;
-}
-
-void *
-PyCObject_GetDesc(PyObject *self)
-{
-    if (self) {
-        if (self->ob_type == &PyCObject_Type)
-            return ((PyCObject *)self)->desc;
-        PyErr_SetString(PyExc_TypeError,
-                        "PyCObject_GetDesc with non-C-object");
-    }
-    if (!PyErr_Occurred())
-        PyErr_SetString(PyExc_TypeError,
-                        "PyCObject_GetDesc called with null pointer");
-    return NULL;
-}
-
-void *
-PyCObject_Import(char *module_name, char *name)
-{
-    PyObject *m, *c;
-    void *r = NULL;
-
-    if ((m = PyImport_ImportModule(module_name))) {
-        if ((c = PyObject_GetAttrString(m,name))) {
-            r = PyCObject_AsVoidPtr(c);
-            Py_DECREF(c);
-	}
-        Py_DECREF(m);
-    }
-    return r;
-}
-
-int
-PyCObject_SetVoidPtr(PyObject *self, void *cobj)
-{
-    PyCObject* cself = (PyCObject*)self;
-    if (cself == NULL || !PyCObject_Check(cself) ||
-	cself->destructor != NULL) {
-	PyErr_SetString(PyExc_TypeError, 
-			"Invalid call to PyCObject_SetVoidPtr");
-	return 0;
-    }
-    cself->cobject = cobj;
-    return 1;
-}
-
-static void
-PyCObject_dealloc(PyCObject *self)
-{
-    if (self->destructor) {
-        if(self->desc)
-            ((destructor2)(self->destructor))(self->cobject, self->desc);
-        else
-            (self->destructor)(self->cobject);
-    }
-    PyObject_DEL(self);
-}
-
-
-PyDoc_STRVAR(PyCObject_Type__doc__,
-"C objects to be exported from one extension module to another\n\
-\n\
-C objects are used for communication between extension modules.  They\n\
-provide a way for an extension module to export a C interface to other\n\
-extension modules, so that extension modules can use the Python import\n\
-mechanism to link to one another.");
-
-PyTypeObject PyCObject_Type = {
-    PyVarObject_HEAD_INIT(&PyType_Type, 0)
-    "PyCObject",		/*tp_name*/
-    sizeof(PyCObject),		/*tp_basicsize*/
-    0,				/*tp_itemsize*/
-    /* methods */
-    (destructor)PyCObject_dealloc, /*tp_dealloc*/
-    0,				/*tp_print*/
-    0,				/*tp_getattr*/
-    0,				/*tp_setattr*/
-    0,				/*tp_reserved*/
-    0,				/*tp_repr*/
-    0,				/*tp_as_number*/
-    0,				/*tp_as_sequence*/
-    0,				/*tp_as_mapping*/
-    0,				/*tp_hash*/
-    0,				/*tp_call*/
-    0,				/*tp_str*/
-    0,				/*tp_getattro*/
-    0,				/*tp_setattro*/
-    0,				/*tp_as_buffer*/
-    0,				/*tp_flags*/
-    PyCObject_Type__doc__	/*tp_doc*/
-};


More information about the Python-checkins mailing list