evaluator: significant performance enhancements

This commit is contained in:
2023-09-21 17:21:53 -07:00
parent 1a759b9746
commit 4758e92676
21 changed files with 260 additions and 71 deletions

View File

@ -22,7 +22,7 @@ class JavaNativeProvider : NativeProvider {
returnTypeClass,
parameterClasses
)
return CallableFunction { functionArguments -> handle.invokeWithArguments(functionArguments.values) ?: None }
return CallableFunction { functionArguments, _ -> handle.invokeWithArguments(functionArguments) ?: None }
}
private fun lookupClass(name: String): Class<*> = when (name) {

View File

@ -13,17 +13,17 @@ class JnaNativeProvider : NativeProvider {
val library = NativeLibrary.getInstance(functionDefinition.library)
val function = library.getFunction(functionDefinition.function)
?: throw RuntimeException("Failed to find function ${functionDefinition.function} in library ${functionDefinition.library}")
return CallableFunction { functionArgs ->
return CallableFunction { functionArgs, _ ->
val ffiArgs = mutableListOf<Any?>()
for ((index, spec) in arguments.withIndex()) {
val ffiType = functionDefinition.parameters[index]
if (spec.multiple) {
val variableArguments = functionArgs.values
.subList(index, functionArgs.values.size)
val variableArguments = functionArgs
.subList(index, functionArgs.size)
ffiArgs.addAll(variableArguments)
break
} else {
val converted = convert(ffiType, functionArgs.values[index])
val converted = convert(ffiType, functionArgs[index])
ffiArgs.add(converted)
}
}