2 * Licensed under the Apache License, Version 2.0 (the "License");
3 * you may not use this file except in compliance with the License.
4 * You may obtain a copy of the License at
6 * http://www.apache.org/licenses/LICENSE-2.0
8 * Unless required by applicable law or agreed to in writing, software
9 * distributed under the License is distributed on an "AS IS" BASIS,
10 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 * See the License for the specific language governing permissions and
12 * limitations under the License.
18 #define OBJ_CALL(action) \
21 PythonThreadState state(1); \
28 return PyErr_SetJavaError(); \
35 #define INT_CALL(action) \
38 PythonThreadState state(1); \
45 PyErr_SetJavaError(); \
54 #define DECLARE_METHOD(type, name, flags) \
55 { #name, (PyCFunction) type##_##name, flags, "" }
57 #define DECLARE_GET_FIELD(type, name) \
58 { #name, (getter) type##_get__##name, NULL, "", NULL }
60 #define DECLARE_SET_FIELD(type, name) \
61 { #name, NULL, (setter) type##_set__##name, "", NULL }
63 #define DECLARE_GETSET_FIELD(type, name) \
64 { #name, (getter) type##_get__##name, (setter) type##_set__##name, "", NULL }
66 #define PY_TYPE(name) name##$$Type
68 #define DECLARE_TYPE(name, t_name, base, javaClass, \
69 init, iter, iternext, getset, mapping, sequence) \
70 PyTypeObject PY_TYPE(name) = { \
71 PyObject_HEAD_INIT(NULL) \
73 /* tp_name */ #name, \
74 /* tp_basicsize */ sizeof(t_name), \
75 /* tp_itemsize */ 0, \
82 /* tp_as_number */ 0, \
83 /* tp_as_sequence */ sequence, \
84 /* tp_as_mapping */ mapping, \
88 /* tp_getattro */ 0, \
89 /* tp_setattro */ 0, \
90 /* tp_as_buffer */ 0, \
91 /* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, \
92 /* tp_doc */ #t_name" objects", \
93 /* tp_traverse */ 0, \
95 /* tp_richcompare */ 0, \
96 /* tp_weaklistoffset */ 0, \
97 /* tp_iter */ (getiterfunc) iter, \
98 /* tp_iternext */ (iternextfunc) iternext, \
99 /* tp_methods */ t_name##__methods_, \
100 /* tp_members */ 0, \
101 /* tp_getset */ getset, \
102 /* tp_base */ &PY_TYPE(base), \
104 /* tp_descr_get */ 0, \
105 /* tp_descr_set */ 0, \
106 /* tp_dictoffset */ 0, \
107 /* tp_init */ (initproc)init, \
111 PyObject *t_name::wrap_Object(const javaClass& object) \
116 (t_name *) PY_TYPE(name).tp_alloc(&PY_TYPE(name), 0); \
118 self->object = object; \
119 return (PyObject *) self; \
123 PyObject *t_name::wrap_jobject(const jobject& object) \
127 if (!env->isInstanceOf(object, javaClass::initializeClass)) \
129 PyErr_SetObject(PyExc_TypeError, \
130 (PyObject *) &PY_TYPE(name)); \
133 t_name *self = (t_name *) \
134 PY_TYPE(name).tp_alloc(&PY_TYPE(name), 0); \
136 self->object = javaClass(object); \
137 return (PyObject *) self; \
143 #define INSTALL_TYPE(name, module) \
144 if (PyType_Ready(&PY_TYPE(name)) == 0) \
146 Py_INCREF(&PY_TYPE(name)); \
147 PyModule_AddObject(module, #name, (PyObject *) &PY_TYPE(name)); \
151 #define Py_RETURN_BOOL(b) \
159 #define Py_RETURN_SELF \
162 return (PyObject *) self; \
166 #if PY_VERSION_HEX < 0x02040000
168 #define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
169 #define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
170 #define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False
172 #define Py_CLEAR(op) \
175 PyObject *tmp = (PyObject *)(op); \
181 #define Py_VISIT(op) \
184 int vret = visit((PyObject *)(op), arg); \
190 #endif /* Python 2.3.5 */
193 #endif /* _macros_H */