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