language: prelude and internal functions, and varargs support

This commit is contained in:
2023-09-10 19:27:59 -04:00
parent 1cfb197a7f
commit e8c984f2dc
24 changed files with 166 additions and 104 deletions

View File

@ -1,11 +1,6 @@
package gay.pizza.pork.ffi
import gay.pizza.pork.ast.CompilationUnit
import gay.pizza.pork.ast.DefinitionModifiers
import gay.pizza.pork.ast.FunctionDefinition
import gay.pizza.pork.ast.Native
import gay.pizza.pork.ast.StringLiteral
import gay.pizza.pork.ast.Symbol
import gay.pizza.pork.ast.*
import java.lang.reflect.Method
import java.lang.reflect.Modifier
import java.lang.reflect.Parameter
@ -149,7 +144,12 @@ class JavaAutogen(val javaClass: Class<*>) {
FunctionDefinition(
modifiers = DefinitionModifiers(true),
symbol = Symbol("${prefix}_${name}"),
arguments = parameterNames.map { Symbol(it) },
arguments = parameterNames.map {
ArgumentSpec(
symbol = Symbol(it),
multiple = false
)
},
native = asNative(functionDefinition),
block = null
)

View File

@ -1,12 +1,12 @@
package gay.pizza.pork.ffi
import gay.pizza.pork.evaluator.CallableFunction
import gay.pizza.pork.evaluator.NativeFunctionProvider
import gay.pizza.pork.evaluator.NativeProvider
import gay.pizza.pork.evaluator.None
import java.lang.invoke.MethodHandles
import java.lang.invoke.MethodType
class JavaNativeProvider : NativeFunctionProvider {
class JavaNativeProvider : NativeProvider {
private val lookup = MethodHandles.lookup()
override fun provideNativeFunction(definition: String): CallableFunction {

View File

@ -2,9 +2,9 @@ package gay.pizza.pork.ffi
import com.sun.jna.Function
import gay.pizza.pork.evaluator.CallableFunction
import gay.pizza.pork.evaluator.NativeFunctionProvider
import gay.pizza.pork.evaluator.NativeProvider
class JnaNativeProvider : NativeFunctionProvider {
class JnaNativeProvider : NativeProvider {
override fun provideNativeFunction(definition: String): CallableFunction {
val functionDefinition = FfiFunctionDefinition.parse(definition)
val function = Function.getFunction(functionDefinition.library, functionDefinition.function)