diff options
Diffstat (limited to 'src/java/com/jogamp/gluegen/CMethodBindingEmitter.java')
-rw-r--r-- | src/java/com/jogamp/gluegen/CMethodBindingEmitter.java | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java b/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java index e20a1cb..cbd33fd 100644 --- a/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java +++ b/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java @@ -116,7 +116,7 @@ public class CMethodBindingEmitter extends FunctionEmitter { // We need this in order to compute sizes of certain types protected MachineDataInfo machDesc; - private final CMethodBindingEmitter jcbCMethodEmitter; + private final CMethodBindingEmitter jcbFuncCMethodEmitter; private final JavaCallbackEmitter javaCallbackEmitter; /** @@ -154,13 +154,13 @@ public class CMethodBindingEmitter extends FunctionEmitter { final JavaCallbackInfo javaCallback = cfg.setFuncToJavaCallbackMap.get(binding.getName()); if( null != javaCallback ) { // jcbNativeBasename = CodeGenUtils.capitalizeString( javaCallback.setFuncName+javaCallback.cbSimpleClazzName.replace("_", "") ); - jcbCMethodEmitter = new CMethodBindingEmitter(javaCallback.cbFuncBinding, - unit, javaPackageName, javaClassName, isOverloadedBinding, - isJavaMethodStatic, forImplementingMethodCall, - forIndirectBufferAndArrayImplementation, machDesc, configuration); + jcbFuncCMethodEmitter = new CMethodBindingEmitter(javaCallback.cbFuncBinding, + unit, javaPackageName, javaClassName, isOverloadedBinding, + isJavaMethodStatic, forImplementingMethodCall, + forIndirectBufferAndArrayImplementation, machDesc, configuration); javaCallbackEmitter = new JavaCallbackEmitter(cfg, binding, javaCallback, null); } else { - jcbCMethodEmitter = null; + jcbFuncCMethodEmitter = null; javaCallbackEmitter = null; } setCommentEmitter(defaultCommentEmitter); @@ -415,7 +415,7 @@ public class CMethodBindingEmitter extends FunctionEmitter { @Override protected void emitAdditionalCode() { if( null != javaCallbackEmitter ) { - javaCallbackEmitter.emitCAdditionalCode(unit, jcbCMethodEmitter); + javaCallbackEmitter.emitCAdditionalCode(unit, jcbFuncCMethodEmitter); } } @@ -984,9 +984,11 @@ public class CMethodBindingEmitter extends FunctionEmitter { unit.emit(") + " + byteOffsetArgName(i) + ")"); } } else { - if (javaArgType.isString()) { unit.emit(STRING_CHARS_PREFIX); } + if ( javaArgType.isString() ) { + unit.emit(STRING_CHARS_PREFIX); + } unit.emit(binding.getArgumentName(i)); - if( null != javaCallbackEmitter ) { + if( !javaArgType.isString() && null != javaCallbackEmitter ) { javaCallbackEmitter.emitCOptArgumentSuffix(unit, i); } } @@ -1107,11 +1109,14 @@ public class CMethodBindingEmitter extends FunctionEmitter { unit.addTailCode(CCodeUnit.NewDirectByteBufferCopyUnitCode); } else if (javaType.isNIOBuffer() || javaType.isCompoundTypeWrapper()) { if( addLocalVar ) { - unit.emit(" "+javaType.jniTypeName()+" "+javaArgName+" = "); + unit.emitln(" "+javaType.jniTypeName()+" "+javaArgName+";"); } else { - unit.emit(" "+javaArgName+" = "); + unit.emitln(" "+javaArgName+";"); } - unit.emit("(NULL == "+cArgName+") ? NULL : (*env)->NewDirectByteBuffer(env, (void *)"+cArgName+", "); + unit.emitln(" if(NULL == "+cArgName+") {"); + unit.emitln(" "+javaArgName+" = NULL;"); + unit.emitln(" } else {"); + unit.emit (" "+javaArgName+" = (*env)->NewDirectByteBuffer(env, (void *)"+cArgName+", "); // See whether capacity has been specified if ( isReturnVal && returnValueCapacityExpression != null) { @@ -1168,13 +1173,14 @@ public class CMethodBindingEmitter extends FunctionEmitter { "value for function \"" + binding.getName() + "\". " + wmsg + " (sizeof(" + cType.getCName() + ")): " + binding); } } - unit.emitln(" /** "); - unit.emitln(" * mode: "+mode+", arg #"+argIdx); - unit.emitln(" * cType: "+cType.getDebugString()); - unit.emitln(" * cTargetType: "+cTargetType.getDebugString()); - unit.emitln(" * javaType: "+javaType.getDebugString()); - unit.emitln(" */"); + unit.emitln(" /** "); + unit.emitln(" * mode: "+mode+", arg #"+argIdx); + unit.emitln(" * cType: "+cType.getDebugString()); + unit.emitln(" * cTargetType: "+cTargetType.getDebugString()); + unit.emitln(" * javaType: "+javaType.getDebugString()); + unit.emitln(" */"); } + unit.emitln(" }"); } else if (javaType.isString()) { final boolean pascalString = javaType.isPascalStringVariant(); final String lenArgName; |