annotate Objects/cobject.c @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents e3ab48988c77
children f022bbd12338
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3315
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /***********************************************************
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 The Netherlands.
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 All Rights Reserved
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
8 documentation for any purpose and without fee is hereby granted,
3315
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 provided that the above copyright notice appear in all copies and that
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
10 both that copyright notice and this permission notice appear in
3315
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
12 Centrum or CWI or Corporation for National Research Initiatives or
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
13 CNRI not be used in advertising or publicity pertaining to
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
14 distribution of the software without specific, written prior
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
15 permission.
3315
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
17 While CWI is the initial source for this software, a modified version
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
18 is made available by the Corporation for National Research Initiatives
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
19 (CNRI) at the Internet address ftp://ftp.python.org.
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
20
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3910
diff changeset
28 PERFORMANCE OF THIS SOFTWARE.
3315
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 ******************************************************************/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
31
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 /* Wrap void* pointers to be passed between C modules */
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 #include "Python.h"
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
35
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
36
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 /* Declarations for objects of type PyCObject */
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
38
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 typedef struct {
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 PyObject_HEAD
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 void *cobject;
3910
9cf11af3628c Allow compilation by K&R C compiler.
Guido van Rossum <guido@python.org>
parents: 3315
diff changeset
42 void (*destructor) Py_PROTO((void *));
3315
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 } PyCObject;
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
44
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 PyObject *
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 PyCObject_FromVoidPtr(cobj, destr)
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 void *cobj;
3910
9cf11af3628c Allow compilation by K&R C compiler.
Guido van Rossum <guido@python.org>
parents: 3315
diff changeset
48 void (*destr) Py_PROTO((void *));
3315
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 {
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 PyCObject *self;
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
51
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 self = PyObject_NEW(PyCObject, &PyCObject_Type);
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 if (self == NULL)
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 return NULL;
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 self->cobject=cobj;
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 self->destructor=destr;
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 return (PyObject *)self;
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 }
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
59
5033
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
60 void *
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
61 PyCObject_AsVoidPtr(self)
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
62 PyObject *self;
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
63 {
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
64 if(self)
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
65 {
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
66 if(self->ob_type == &PyCObject_Type)
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
67 return ((PyCObject *)self)->cobject;
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
68 PyErr_SetString(PyExc_TypeError,
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
69 "PyCObject_AsVoidPtr with non-C-object");
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
70 }
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
71 if(! PyErr_Occurred())
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
72 PyErr_SetString(PyExc_TypeError,
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
73 "PyCObject_AsVoidPtr called with null pointer");
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
74 return NULL;
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
75 }
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
76
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
77 void *
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
78 PyCObject_Import(module_name, name)
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
79 char *module_name;
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
80 char *name;
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
81 {
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
82 PyObject *m, *c;
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
83 void *r=NULL;
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
84
5115
e3ab48988c77 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 5033
diff changeset
85 if((m=PyImport_ImportModule(module_name)))
5033
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
86 {
5115
e3ab48988c77 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 5033
diff changeset
87 if((c=PyObject_GetAttrString(m,name)))
5033
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
88 {
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
89 r=PyCObject_AsVoidPtr(c);
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
90 Py_DECREF(c);
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
91 }
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
92 Py_DECREF(m);
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
93 }
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
94
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
95 return r;
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
96 }
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
97
3315
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 static void
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
99 PyCObject_dealloc(self)
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
100 PyCObject *self;
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 {
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 if(self->destructor) (self->destructor)(self->cobject);
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 PyMem_DEL(self);
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 }
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
105
5033
5b7b703dabfa Added PyCObject_Import.
Guido van Rossum <guido@python.org>
parents: 4584
diff changeset
106
3315
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 static char PyCObject_Type__doc__[] =
3910
9cf11af3628c Allow compilation by K&R C compiler.
Guido van Rossum <guido@python.org>
parents: 3315
diff changeset
108 "C objects to be exported from one extension module to another\n\
9cf11af3628c Allow compilation by K&R C compiler.
Guido van Rossum <guido@python.org>
parents: 3315
diff changeset
109 \n\
9cf11af3628c Allow compilation by K&R C compiler.
Guido van Rossum <guido@python.org>
parents: 3315
diff changeset
110 C objects are used for communication between extension modules. They\n\
9cf11af3628c Allow compilation by K&R C compiler.
Guido van Rossum <guido@python.org>
parents: 3315
diff changeset
111 provide a way for an extension module to export a C interface to other\n\
9cf11af3628c Allow compilation by K&R C compiler.
Guido van Rossum <guido@python.org>
parents: 3315
diff changeset
112 extension modules, so that extension modules can use the Python import\n\
9cf11af3628c Allow compilation by K&R C compiler.
Guido van Rossum <guido@python.org>
parents: 3315
diff changeset
113 mechanism to link to one another.\n"
3315
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
114 ;
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
115
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 PyTypeObject PyCObject_Type = {
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 PyObject_HEAD_INIT(&PyType_Type)
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 0, /*ob_size*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 "PyCObject", /*tp_name*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 sizeof(PyCObject), /*tp_basicsize*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 0, /*tp_itemsize*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 /* methods */
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 (destructor)PyCObject_dealloc, /*tp_dealloc*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 (printfunc)0, /*tp_print*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 (getattrfunc)0, /*tp_getattr*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 (setattrfunc)0, /*tp_setattr*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 (cmpfunc)0, /*tp_compare*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 (reprfunc)0, /*tp_repr*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 0, /*tp_as_number*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 0, /*tp_as_sequence*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 0, /*tp_as_mapping*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 (hashfunc)0, /*tp_hash*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 (ternaryfunc)0, /*tp_call*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 (reprfunc)0, /*tp_str*/
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
135
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
136 /* Space for future expansion */
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
137 0L,0L,0L,0L,
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 PyCObject_Type__doc__ /* Documentation string */
44f48aaca8bf opaque C object a la Jim Fulton
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 };