Upstream version 1.3.40
[profile/ivi/swig.git] / Lib / java / javahead.swg
1 /* -----------------------------------------------------------------------------
2  * See the LICENSE file for information on copyright, usage and redistribution
3  * of SWIG, and the README file for authors - http://www.swig.org/release.html.
4  *
5  * javahead.swg
6  *
7  * Java support code
8  * ----------------------------------------------------------------------------- */
9
10
11 /* JNI function calls require different calling conventions for C and C++. These JCALL macros are used so 
12  * that the same typemaps can be used for generating code for both C and C++. The SWIG preprocessor can expand
13  * the macros thereby generating the correct calling convention. It is thus essential that all typemaps that
14  * use the macros are not within %{ %} brackets as they won't be run through the SWIG preprocessor. */
15 #ifdef __cplusplus
16 #   define JCALL0(func, jenv) jenv->func()
17 #   define JCALL1(func, jenv, ar1) jenv->func(ar1)
18 #   define JCALL2(func, jenv, ar1, ar2) jenv->func(ar1, ar2)
19 #   define JCALL3(func, jenv, ar1, ar2, ar3) jenv->func(ar1, ar2, ar3)
20 #   define JCALL4(func, jenv, ar1, ar2, ar3, ar4) jenv->func(ar1, ar2, ar3, ar4)
21 #   define JCALL5(func, jenv, ar1, ar2, ar3, ar4, ar5) jenv->func(ar1, ar2, ar3, ar4, ar5)
22 #   define JCALL6(func, jenv, ar1, ar2, ar3, ar4, ar5, ar6) jenv->func(ar1, ar2, ar3, ar4, ar5, ar6)
23 #   define JCALL7(func, jenv, ar1, ar2, ar3, ar4, ar5, ar6, ar7) jenv->func(ar1, ar2, ar3, ar4, ar5, ar6, ar7)
24 #else
25 #   define JCALL0(func, jenv) (*jenv)->func(jenv)
26 #   define JCALL1(func, jenv, ar1) (*jenv)->func(jenv, ar1)
27 #   define JCALL2(func, jenv, ar1, ar2) (*jenv)->func(jenv, ar1, ar2)
28 #   define JCALL3(func, jenv, ar1, ar2, ar3) (*jenv)->func(jenv, ar1, ar2, ar3)
29 #   define JCALL4(func, jenv, ar1, ar2, ar3, ar4) (*jenv)->func(jenv, ar1, ar2, ar3, ar4)
30 #   define JCALL5(func, jenv, ar1, ar2, ar3, ar4, ar5) (*jenv)->func(jenv, ar1, ar2, ar3, ar4, ar5)
31 #   define JCALL6(func, jenv, ar1, ar2, ar3, ar4, ar5, ar6) (*jenv)->func(jenv, ar1, ar2, ar3, ar4, ar5, ar6)
32 #   define JCALL7(func, jenv, ar1, ar2, ar3, ar4, ar5, ar6, ar7) (*jenv)->func(jenv, ar1, ar2, ar3, ar4, ar5, ar6, ar7)
33 #endif
34
35 %insert(runtime) %{
36 /* Fix for jlong on some versions of gcc on Windows */
37 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
38   typedef long long __int64;
39 #endif
40
41 /* Fix for jlong on 64-bit x86 Solaris */
42 #if defined(__x86_64)
43 # ifdef _LP64
44 #   undef _LP64
45 # endif
46 #endif
47
48 #include <jni.h>
49 #include <stdlib.h>
50 #include <string.h>
51 %}
52
53 %insert(runtime) %{
54 /* Support for throwing Java exceptions */
55 typedef enum {
56   SWIG_JavaOutOfMemoryError = 1, 
57   SWIG_JavaIOException, 
58   SWIG_JavaRuntimeException, 
59   SWIG_JavaIndexOutOfBoundsException,
60   SWIG_JavaArithmeticException,
61   SWIG_JavaIllegalArgumentException,
62   SWIG_JavaNullPointerException,
63   SWIG_JavaDirectorPureVirtual,
64   SWIG_JavaUnknownError
65 } SWIG_JavaExceptionCodes;
66
67 typedef struct {
68   SWIG_JavaExceptionCodes code;
69   const char *java_exception;
70 } SWIG_JavaExceptions_t;
71 %}
72
73 %insert(runtime) {
74 static void SWIGUNUSED SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionCodes code, const char *msg) {
75   jclass excep;
76   static const SWIG_JavaExceptions_t java_exceptions[] = {
77     { SWIG_JavaOutOfMemoryError, "java/lang/OutOfMemoryError" },
78     { SWIG_JavaIOException, "java/io/IOException" },
79     { SWIG_JavaRuntimeException, "java/lang/RuntimeException" },
80     { SWIG_JavaIndexOutOfBoundsException, "java/lang/IndexOutOfBoundsException" },
81     { SWIG_JavaArithmeticException, "java/lang/ArithmeticException" },
82     { SWIG_JavaIllegalArgumentException, "java/lang/IllegalArgumentException" },
83     { SWIG_JavaNullPointerException, "java/lang/NullPointerException" },
84     { SWIG_JavaDirectorPureVirtual, "java/lang/RuntimeException" },
85     { SWIG_JavaUnknownError,  "java/lang/UnknownError" },
86     { (SWIG_JavaExceptionCodes)0,  "java/lang/UnknownError" }
87   };
88   const SWIG_JavaExceptions_t *except_ptr = java_exceptions;
89
90   while (except_ptr->code != code && except_ptr->code)
91     except_ptr++;
92
93   JCALL0(ExceptionClear, jenv);
94   excep = JCALL1(FindClass, jenv, except_ptr->java_exception);
95   if (excep)
96     JCALL2(ThrowNew, jenv, excep, msg);
97 }
98 }
99
100 %insert(runtime) %{
101 /* Contract support */
102
103 #define SWIG_contract_assert(nullreturn, expr, msg) if (!(expr)) {SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, msg); return nullreturn; } else
104 %}