aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/jogamp/gluegen/JavaCallbackEmitter.java
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2023-12-02 18:32:34 +0100
committerSven Gothel <[email protected]>2023-12-02 18:32:34 +0100
commit0666c8f9a353b42ffde4902dc0cdec66f925a6e3 (patch)
tree8988d7e90f84c86d687b38205754e1ecf4efb839 /src/java/com/jogamp/gluegen/JavaCallbackEmitter.java
parent0f731bfabcdd19665c3c09c5f40f898101c501c9 (diff)
Bug 1481 - Hide [ArgumentIs]PascalString argument's length
Native pascal strings shall be just treated as normal Java strings on the Java side. Hence drop the length parameter across generated API, i.e. - C Function bindings - Java Callbacks
Diffstat (limited to 'src/java/com/jogamp/gluegen/JavaCallbackEmitter.java')
-rw-r--r--src/java/com/jogamp/gluegen/JavaCallbackEmitter.java38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/java/com/jogamp/gluegen/JavaCallbackEmitter.java b/src/java/com/jogamp/gluegen/JavaCallbackEmitter.java
index 3359c1c..1c6a3c7 100644
--- a/src/java/com/jogamp/gluegen/JavaCallbackEmitter.java
+++ b/src/java/com/jogamp/gluegen/JavaCallbackEmitter.java
@@ -483,7 +483,7 @@ public final class JavaCallbackEmitter {
final StringBuilder buf = new StringBuilder();
buf.append("(");
info.cbFuncBinding.forEachParameter( ( final int idx, final int consumedCount, final Type cType, final JavaType jType, final String name ) -> {
- if( !cType.isVoid() ) {
+ if( !cType.isVoid() && !jType.isPascalLen() ) {
if( idx == info.cbFuncUserParamIdx ) {
buf.append("J");
} else {
@@ -568,7 +568,7 @@ public final class JavaCallbackEmitter {
final boolean[] mapNativePtrToCompound = { false };
final JavaType[] origUserParamJType = { null };
info.cbFuncBinding.forEachParameter( ( final int idx, final int consumedCount, final Type cType, final JavaType jType, final String name ) -> {
- if( !cType.isVoid() ) {
+ if( !cType.isVoid() && !jType.isPascalLen() ) {
if( 0 < consumedCount ) { unit.emit(", "); }
if( idx == info.cbFuncUserParamIdx ) {
unit.emit("long nativeUserParam");
@@ -623,10 +623,12 @@ public final class JavaCallbackEmitter {
}
unit.emit("value.func.callback(");
info.cbFuncBinding.forEachParameter( ( final int idx, final int consumedCount, final Type cType, final JavaType jType, final String name ) -> {
- if( !cType.isVoid() ) {
+ if( !cType.isVoid() && !jType.isPascalLen() ) {
if( 0 < consumedCount ) { unit.emit(", "); }
if( idx == info.cbFuncUserParamIdx && !useParamLocal[0] ) {
unit.emit("value.param");
+ } else if( jType.isPascalLen() ){
+ unit.emit( "/* "+name+" */");
} else {
unit.emit(name);
}
@@ -834,7 +836,7 @@ public final class JavaCallbackEmitter {
}
unit.emit("(*env)->CallStatic" + CodeGenUtils.capitalizeString( jretType.getName() ) +"Method(env, cbClazz, cbMethod, ");
// javaCallback.cbFuncCEmitter.emitBodyPassCArguments();
- emitJavaCallbackBodyPassJavaArguments(unit);
+ emitCBodyPassArguments(unit);
unit.emitln(");");
unit.emitln(" if( (*env)->ExceptionCheck(env) ) {");
unit.emitln(" fprintf(stderr, \"Info: Callback '"+jcbFriendlyBasename+"': Exception in Java Callback caught:\\n\");");
@@ -865,24 +867,26 @@ public final class JavaCallbackEmitter {
return count;
}
- private int emitJavaCallbackBodyPassJavaArguments(final CodeUnit unit) {
+ private int emitCBodyPassArguments(final CodeUnit unit) {
int count = 0;
boolean needsComma = false;
for (int i = 0; i < info.cbFuncBinding.getNumArguments(); i++) {
- if (needsComma) {
- unit.emit(", ");
- needsComma = false;
- }
- final String baseArgName = info.cbFuncBinding.getArgumentName(i);
final JavaType currentJavaType = info.cbFuncBinding.getJavaArgumentType(i);
- if( i != info.cbFuncUserParamIdx && currentJavaType.isCompoundTypeWrapper() ) {
- final String cBaseArgName = CodeGenUtils.capitalizeString( baseArgName );
- unit.emit( "(*env)->CallStaticObjectMethod(env, cbClazzArg" + cBaseArgName + ", cbMethodArg" + cBaseArgName + ", " + baseArgName + "_jni)" );
- } else {
- unit.emit( baseArgName + "_jni" );
+ if( !currentJavaType.isPascalLen() ) {
+ if (needsComma) {
+ unit.emit(", ");
+ needsComma = false;
+ }
+ final String baseArgName = info.cbFuncBinding.getArgumentName(i);
+ if( i != info.cbFuncUserParamIdx && currentJavaType.isCompoundTypeWrapper() ) {
+ final String cBaseArgName = CodeGenUtils.capitalizeString( baseArgName );
+ unit.emit( "(*env)->CallStaticObjectMethod(env, cbClazzArg" + cBaseArgName + ", cbMethodArg" + cBaseArgName + ", " + baseArgName + "_jni)" );
+ } else {
+ unit.emit( baseArgName + "_jni" );
+ }
+ needsComma = true;
+ ++count;
}
- needsComma = true;
- ++count;
}
return count;
}