From 0666c8f9a353b42ffde4902dc0cdec66f925a6e3 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sat, 2 Dec 2023 18:32:34 +0100 Subject: 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 --- .../com/jogamp/gluegen/JavaCallbackEmitter.java | 38 ++++++++++++---------- 1 file changed, 21 insertions(+), 17 deletions(-) (limited to 'src/java/com/jogamp/gluegen/JavaCallbackEmitter.java') 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; } -- cgit v1.2.3