mirror of
https://github.com/GayPizzaSpecifications/pork.git
synced 2025-08-03 13:11:32 +00:00
evaluator: significant performance enhancements
This commit is contained in:
@ -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) {
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user