aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/jogamp/gluegen/CMethodBindingEmitter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/com/jogamp/gluegen/CMethodBindingEmitter.java')
-rw-r--r--src/java/com/jogamp/gluegen/CMethodBindingEmitter.java42
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;