aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/sun/gluegen/JavaMethodBindingEmitter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/com/sun/gluegen/JavaMethodBindingEmitter.java')
-rw-r--r--src/java/com/sun/gluegen/JavaMethodBindingEmitter.java14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/java/com/sun/gluegen/JavaMethodBindingEmitter.java b/src/java/com/sun/gluegen/JavaMethodBindingEmitter.java
index 8db4a3b..4153e32 100644
--- a/src/java/com/sun/gluegen/JavaMethodBindingEmitter.java
+++ b/src/java/com/sun/gluegen/JavaMethodBindingEmitter.java
@@ -589,7 +589,7 @@ public class JavaMethodBindingEmitter extends FunctionEmitter
}
if (type.isNIOBuffer()) {
- if(type.isNIOPointerBuffer()) {
+ if(type.isNIOInt64Buffer() || type.isNIOPointerBuffer()) {
if (directNIOOnly) {
writer.print( getArgumentName(i)+ " != null ? " + getArgumentName(i) + ".getBuffer() : null");
} else {
@@ -730,11 +730,17 @@ public class JavaMethodBindingEmitter extends FunctionEmitter
if (!returnType.isNIOByteBuffer()) {
// See whether we have to expand pointers to longs
if (getBinding().getCReturnType().pointerDepth() >= 2) {
- if (!returnType.isNIOPointerBuffer()) {
+ if (returnType.isNIOPointerBuffer()) {
+ writer.println(" return PointerBuffer.wrap(_res);");
+ } else if (returnType.isNIOInt64Buffer()) {
+ writer.println(" return Int64Buffer.wrap(_res);");
+ } else {
throw new RuntimeException("While emitting glue code for " + getName() +
- ": can not legally make pointers opaque to anything but longs");
+ ": can not legally make pointers opaque to anything but PointerBuffer or Int64Buffer/long");
}
- writer.println(" return PointerBuffer.wrap(_res);");
+ } else if (getBinding().getCReturnType().pointerDepth() == 1 &&
+ returnType.isNIOInt64Buffer()) {
+ writer.println(" return Int64Buffer.wrap(_res);");
} else {
String returnTypeName = returnType.getName().substring("java.nio.".length());
writer.println(" return _res.as" + returnTypeName + "();");