aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/games/gluegen/JavaMethodBindingEmitter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/java/games/gluegen/JavaMethodBindingEmitter.java')
-rw-r--r--src/net/java/games/gluegen/JavaMethodBindingEmitter.java34
1 files changed, 31 insertions, 3 deletions
diff --git a/src/net/java/games/gluegen/JavaMethodBindingEmitter.java b/src/net/java/games/gluegen/JavaMethodBindingEmitter.java
index e5b83a26c..d6a34c1d3 100644
--- a/src/net/java/games/gluegen/JavaMethodBindingEmitter.java
+++ b/src/net/java/games/gluegen/JavaMethodBindingEmitter.java
@@ -65,8 +65,10 @@ public class JavaMethodBindingEmitter extends FunctionEmitter
// Exception type raised in the generated code if runtime checks fail
private String runtimeExceptionType;
- private MethodBinding binding;
- private boolean forImplementingMethodCall;
+ protected MethodBinding binding;
+ protected boolean forImplementingMethodCall;
+
+ protected boolean prefixedMethod = false;
// A non-null value indicates that rather than returning a compound
// type accessor we are returning an array of such accessors; this
@@ -149,13 +151,16 @@ public class JavaMethodBindingEmitter extends FunctionEmitter
{
boolean needComma = false;
int numEmitted = 0;
+ int numBufferOffsetArgs = 0, numBufferOffsetArrayArgs = 0;
- if (forImplementingMethodCall && binding.hasContainingType()) {
+ if (forImplementingMethodCall && binding.hasContainingType()) {
// Always emit outgoing "this" argument
writer.print("java.nio.Buffer ");
writer.print(javaThisArgumentName());
++numEmitted;
needComma = true;
+ numBufferOffsetArgs++;
+ writer.print(", int " + byteOffsetConversionArgName(numBufferOffsetArgs));
}
for (int i = 0; i < binding.getNumArguments(); i++) {
@@ -185,15 +190,38 @@ public class JavaMethodBindingEmitter extends FunctionEmitter
writer.print(binding.getArgumentName(i));
++numEmitted;
needComma = true;
+ // Add Buffer offset argument to store the buffer offset
+ if((forImplementingMethodCall || prefixedMethod) &&
+ (type.isNIOBuffer() || type.isNIOBufferArray())) {
+ if(!type.isArray()) {
+ numBufferOffsetArgs++;
+ writer.print(", int " + byteOffsetConversionArgName(numBufferOffsetArgs));
+ } else {
+ numBufferOffsetArrayArgs++;
+ writer.print(", int[] " +
+ byteOffsetArrayConversionArgName(numBufferOffsetArrayArgs));
+ }
+ }
}
return numEmitted;
}
+
protected String getImplMethodName()
{
return binding.getName() + "0";
}
+
+ protected String byteOffsetConversionArgName(int i) {
+ return "__byteOffset" + i;
+ }
+
+ protected String byteOffsetArrayConversionArgName(int i) {
+ return "__byteOffsetArray" + i;
+ }
+
+
protected void emitBody(PrintWriter writer)
{
writer.println(';');