diff --git a/Lib/java/java.swg b/Lib/java/java.swg index 9ed375c7d..a32941176 100644 --- a/Lib/java/java.swg +++ b/Lib/java/java.swg @@ -368,7 +368,7 @@ SWIGINTERN const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) { } /* Convert to BigInteger (see out typemap) */ -%typemap(directorin, descriptor="Ljava/math/BigInteger;") unsigned long long, const unsigned long long & %{ +%typemap(directorin, descriptor="Ljava/math/BigInteger;", noblock=1) unsigned long long, const unsigned long long & { { jbyteArray ba = JCALL1(NewByteArray, jenv, 9); jbyte* bae = JCALL2(GetByteArrayElements, jenv, ba, 0); @@ -387,7 +387,7 @@ SWIGINTERN const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) { JCALL1(DeleteLocalRef, jenv, ba); $input = bigint; } -Swig::LocalRefGuard $1_refguard(jenv, $input); %} +Swig::LocalRefGuard $1_refguard(jenv, $input); } %typemap(javadirectorin) unsigned long long "$jniinput" %typemap(javadirectorout) unsigned long long "$javacall" @@ -409,14 +409,14 @@ Swig::LocalRefGuard $1_refguard(jenv, $input); %} } } -%typemap(directorin, descriptor="Ljava/lang/String;", noblock=1) char * %{ +%typemap(directorin, descriptor="Ljava/lang/String;", noblock=1) char * { $input = 0; if ($1) { $input = JCALL1(NewStringUTF, jenv, (const char *)$1); if (!$input) return $null; } Swig::LocalRefGuard $1_refguard(jenv, $input); -%} +} %typemap(freearg, noblock=1) char * { if ($1) JCALL2(ReleaseStringUTFChars, jenv, $input, (const char *)$1); } %typemap(out, noblock=1) char * { if ($1) $result = JCALL1(NewStringUTF, jenv, (const char *)$1); } @@ -743,14 +743,14 @@ Swig::LocalRefGuard $1_refguard(jenv, $input); %} } } -%typemap(directorin, descriptor="Ljava/lang/String;", noblock=1) char[ANY], char[] %{ +%typemap(directorin, descriptor="Ljava/lang/String;", noblock=1) char[ANY], char[] { $input = 0; if ($1) { $input = JCALL1(NewStringUTF, jenv, (const char *)$1); if (!$input) return $null; } Swig::LocalRefGuard $1_refguard(jenv, $input); -%} +} %typemap(argout) char[ANY], char[] "" %typemap(freearg, noblock=1) char[ANY], char[] { if ($1) JCALL2(ReleaseStringUTFChars, jenv, $input, (const char *)$1); } @@ -1357,12 +1357,15 @@ SWIG_PROXY_CONSTRUCTOR(true, true, SWIGTYPE) %typemap(argout) (char *STRING, size_t LENGTH) { if ($input) JCALL3(ReleaseByteArrayElements, jenv, $input, (jbyte *)$1, 0); } -%typemap(directorin, descriptor="[B") (char *STRING, size_t LENGTH) %{ - jbyteArray $1_jb = (jenv)->NewByteArray((jsize)$2); - (jenv)->SetByteArrayRegion($1_jb, 0, (jsize)$2, (jbyte *)$1); - $input = $1_jb; - Swig::LocalRefGuard $1_refguard(jenv, $input); -%} +%typemap(directorin, descriptor="[B", noblock=1) (char *STRING, size_t LENGTH) { + $input = 0; + if ($1) { + $input = JCALL1(NewByteArray, jenv, (jsize)$2); + if (!$input) return $null; + JCALL4(SetByteArrayRegion, jenv, $input, 0, (jsize)$2, (jbyte *)$1); + } + Swig::LocalRefGuard $refguard(jenv, $input); +} %typemap(directorargout) (char *STRING, size_t LENGTH) %{(jenv)->GetByteArrayRegion($input, 0, (jsize)$2, (jbyte *)$1); (jenv)->DeleteLocalRef($input);%} diff --git a/Lib/java/typemaps.i b/Lib/java/typemaps.i index db7dd063d..846875f19 100644 --- a/Lib/java/typemaps.i +++ b/Lib/java/typemaps.i @@ -216,18 +216,18 @@ There are no char *OUTPUT typemaps, however you can apply the signed char * type $input = JCALL1(New##JAVATYPE##Array, jenv, 1); Swig::LocalRefGuard $1_refguard(jenv, $input); %} -%typemap(directorargout) TYPE &OUTPUT +%typemap(directorargout, noblock=1) TYPE &OUTPUT { - JNITYPE jvalue; - JCALL4(Get##JAVATYPE##ArrayRegion, jenv, $input, 0, 1, &jvalue); - $result = jvalue; + JNITYPE $1_jvalue; + JCALL4(Get##JAVATYPE##ArrayRegion, jenv, $input, 0, 1, &$1_jvalue); + $result = $1_jvalue; } -%typemap(directorargout) TYPE *OUTPUT +%typemap(directorargout, noblock=1) TYPE *OUTPUT { - JNITYPE jvalue; - JCALL4(Get##JAVATYPE##ArrayRegion, jenv, $input, 0, 1, &jvalue); - *$result = jvalue; + JNITYPE $1_jvalue; + JCALL4(Get##JAVATYPE##ArrayRegion, jenv, $input, 0, 1, &$1_jvalue); + *$result = $1_jvalue; } %typemap(typecheck) TYPE *OUTPUT = TYPECHECKTYPE; @@ -373,28 +373,26 @@ There are no char *INOUT typemaps, however you can apply the signed char * typem %typemap(directorin,descriptor=JNIDESC) TYPE &INOUT %{ $input = JCALL1(New##JAVATYPE##Array, jenv, 1); - const JNITYPE $1_jvalue = (JNITYPE)$1; + JNITYPE $1_jvalue = (JNITYPE)$1; JCALL4(Set##JAVATYPE##ArrayRegion, jenv, $input, 0, 1, &$1_jvalue); Swig::LocalRefGuard $1_refguard(jenv, $input); %} %typemap(directorin,descriptor=JNIDESC) TYPE *INOUT %{ $input = JCALL1(New##JAVATYPE##Array, jenv, 1); - const JNITYPE $1_jvalue = (JNITYPE)*$1; + JNITYPE $1_jvalue = (JNITYPE)*$1; JCALL4(Set##JAVATYPE##ArrayRegion, jenv, $input, 0, 1, &$1_jvalue); Swig::LocalRefGuard $1_refguard(jenv, $input); %} -%typemap(directorargout) TYPE &INOUT +%typemap(directorargout, noblock=1) TYPE &INOUT { - JNITYPE jvalue; - JCALL4(Get##JAVATYPE##ArrayRegion, jenv, $input, 0, 1, &jvalue); - $result = jvalue; + JCALL4(Get##JAVATYPE##ArrayRegion, jenv, $input, 0, 1, &$1_jvalue); + $result = $1_jvalue; } -%typemap(directorargout) TYPE *INOUT +%typemap(directorargout, noblock=1) TYPE *INOUT { - JNITYPE jvalue; - JCALL4(Get##JAVATYPE##ArrayRegion, jenv, $input, 0, 1, &jvalue); - *$result = jvalue; + JCALL4(Get##JAVATYPE##ArrayRegion, jenv, $input, 0, 1, &$1_jvalue); + *$result = $1_jvalue; } %typemap(typecheck) TYPE *INOUT = TYPECHECKTYPE;