aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/games/gluegen/CMethodBindingImplEmitter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/java/games/gluegen/CMethodBindingImplEmitter.java')
-rw-r--r--src/net/java/games/gluegen/CMethodBindingImplEmitter.java19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/net/java/games/gluegen/CMethodBindingImplEmitter.java b/src/net/java/games/gluegen/CMethodBindingImplEmitter.java
index 43e4f4d86..98c5c1b4a 100644
--- a/src/net/java/games/gluegen/CMethodBindingImplEmitter.java
+++ b/src/net/java/games/gluegen/CMethodBindingImplEmitter.java
@@ -48,8 +48,11 @@ public class CMethodBindingImplEmitter extends CMethodBindingEmitter
protected static final CommentEmitter defaultCImplCommentEmitter =
new CImplCommentEmitter();
+ protected boolean arrayImplRoutine = false;
+
public CMethodBindingImplEmitter(MethodBinding binding,
boolean isOverloadedBinding,
+ boolean arrayImpl,
String javaPackageName,
String javaClassName,
boolean isJavaMethodStatic,
@@ -59,13 +62,17 @@ public class CMethodBindingImplEmitter extends CMethodBindingEmitter
javaPackageName, javaClassName,
isJavaMethodStatic, output);
setCommentEmitter(defaultCImplCommentEmitter);
+ arrayImplRoutine = arrayImpl;
}
protected void emitName(PrintWriter writer)
{
super.emitName(writer);
if (!getIsOverloadedBinding()) {
- writer.print("0");
+ if(!arrayImplRoutine)
+ writer.print("0");
+ else
+ writer.print("1");
}
}
@@ -76,7 +83,12 @@ public class CMethodBindingImplEmitter extends CMethodBindingEmitter
protected String jniMangle(MethodBinding binding) {
StringBuffer buf = new StringBuffer();
buf.append(jniMangle(binding.getName()));
- buf.append("0");
+
+ if(!arrayImplRoutine)
+ buf.append("0");
+ else
+ buf.append("1");
+
buf.append("__");
for (int i = 0; i < binding.getNumArguments(); i++) {
JavaType type = binding.getJavaArgumentType(i);
@@ -91,6 +103,9 @@ public class CMethodBindingImplEmitter extends CMethodBindingEmitter
c = intArrayType.getClass();
jniMangle(c , buf);
}
+ if(type.isArray() && !type.isNIOBufferArray() && !type.isStringArray()) {
+ jniMangle(Integer.TYPE, buf);
+ }
} else {
// FIXME: add support for char* -> String conversion
throw new RuntimeException("Unknown kind of JavaType: name="+type.getName());