--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/sources/macros.h Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,170 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _macros_H
+#define _macros_H
+
+#define OBJ_CALL(action) \
+ { \
+ try { \
+ PythonThreadState state(1); \
+ action; \
+ } catch (JCCEnv::pythonError) { \
+ return NULL; \
+ } catch (JCCEnv::exception e) { \
+ return PyErr_SetJavaError(e.throwable); \
+ } \
+ }
+
+#define INT_CALL(action) \
+ { \
+ try { \
+ PythonThreadState state(1); \
+ action; \
+ } catch (JCCEnv::pythonError) { \
+ return -1; \
+ } catch (JCCEnv::exception e) { \
+ PyErr_SetJavaError(e.throwable); \
+ return -1; \
+ } \
+ }
+
+
+#define DECLARE_METHOD(type, name, flags) \
+ { #name, (PyCFunction) type##_##name, flags, "" }
+
+#define DECLARE_GET_FIELD(type, name) \
+ { #name, (getter) type##_get__##name, NULL, "", NULL }
+
+#define DECLARE_SET_FIELD(type, name) \
+ { #name, NULL, (setter) type##_set__##name, "", NULL }
+
+#define DECLARE_GETSET_FIELD(type, name) \
+ { #name, (getter) type##_get__##name, (setter) type##_set__##name, "", NULL }
+
+
+#define DECLARE_TYPE(name, t_name, base, javaClass, \
+ init, iter, iternext, getset, mapping, sequence) \
+PyTypeObject name##$$Type = { \
+ PyObject_HEAD_INIT(NULL) \
+ /* ob_size */ 0, \
+ /* tp_name */ #name, \
+ /* tp_basicsize */ sizeof(t_name), \
+ /* tp_itemsize */ 0, \
+ /* tp_dealloc */ 0, \
+ /* tp_print */ 0, \
+ /* tp_getattr */ 0, \
+ /* tp_setattr */ 0, \
+ /* tp_compare */ 0, \
+ /* tp_repr */ 0, \
+ /* tp_as_number */ 0, \
+ /* tp_as_sequence */ sequence, \
+ /* tp_as_mapping */ mapping, \
+ /* tp_hash */ 0, \
+ /* tp_call */ 0, \
+ /* tp_str */ 0, \
+ /* tp_getattro */ 0, \
+ /* tp_setattro */ 0, \
+ /* tp_as_buffer */ 0, \
+ /* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, \
+ /* tp_doc */ #t_name" objects", \
+ /* tp_traverse */ 0, \
+ /* tp_clear */ 0, \
+ /* tp_richcompare */ 0, \
+ /* tp_weaklistoffset */ 0, \
+ /* tp_iter */ (getiterfunc) iter, \
+ /* tp_iternext */ (iternextfunc) iternext, \
+ /* tp_methods */ t_name##__methods_, \
+ /* tp_members */ 0, \
+ /* tp_getset */ getset, \
+ /* tp_base */ &base##$$Type, \
+ /* tp_dict */ 0, \
+ /* tp_descr_get */ 0, \
+ /* tp_descr_set */ 0, \
+ /* tp_dictoffset */ 0, \
+ /* tp_init */ (initproc)init, \
+ /* tp_alloc */ 0, \
+ /* tp_new */ 0, \
+}; \
+PyObject *t_name::wrap_Object(const javaClass& object) \
+{ \
+ if (!!object) \
+ { \
+ t_name *self = \
+ (t_name *) name##$$Type.tp_alloc(&name##$$Type, 0); \
+ if (self) \
+ self->object = object; \
+ return (PyObject *) self; \
+ } \
+ Py_RETURN_NONE; \
+} \
+PyObject *t_name::wrap_jobject(const jobject& object) \
+{ \
+ if (!!object) \
+ { \
+ t_name *self = \
+ (t_name *) name##$$Type.tp_alloc(&name##$$Type, 0); \
+ if (self) \
+ self->object = javaClass(object); \
+ return (PyObject *) self; \
+ } \
+ Py_RETURN_NONE; \
+} \
+
+
+#define INSTALL_TYPE(name, module) \
+ if (PyType_Ready(&name##$$Type) == 0) \
+ { \
+ Py_INCREF(&name##$$Type); \
+ PyModule_AddObject(module, #name, (PyObject *) &name##$$Type); \
+ }
+
+
+#define Py_RETURN_BOOL(b) \
+ { \
+ if (b) \
+ Py_RETURN_TRUE; \
+ else \
+ Py_RETURN_FALSE; \
+ }
+
+
+#if PY_VERSION_HEX < 0x02040000
+
+#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
+#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
+#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False
+
+#define Py_CLEAR(op) \
+ do { \
+ if (op) { \
+ PyObject *tmp = (PyObject *)(op); \
+ (op) = NULL; \
+ Py_DECREF(tmp); \
+ } \
+ } while (0)
+
+#define Py_VISIT(op) \
+ do { \
+ if (op) { \
+ int vret = visit((PyObject *)(op), arg); \
+ if (vret) \
+ return vret; \
+ } \
+ } while (0)
+
+#endif /* Python 2.3.5 */
+
+
+#endif /* _macros_H */