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

@ -19,21 +19,10 @@ class RunCommand : CliktCommand(help = "Run Program", name = "run") {
override fun run() {
val tool = FileTool(PlatformFsProvider.resolve(path))
val scope = Scope()
scope.define("println", CallableFunction { arguments ->
if (quiet) {
return@CallableFunction None
}
when (arguments.values.count()) {
0 -> println()
1 -> println(arguments.values[0])
else -> println(arguments.values.joinToString(" "))
}
None
})
val main = tool.loadMainFunction(scope, setupEvaluator = {
addNativeFunctionProvider("ffi", JnaNativeProvider())
addNativeFunctionProvider("java", JavaNativeProvider())
addNativeProvider("internal", InternalNativeProvider(quiet = quiet))
addNativeProvider("ffi", JnaNativeProvider())
addNativeProvider("java", JavaNativeProvider())
})
if (dumpScope) {

View File

@ -5,6 +5,7 @@ import gay.pizza.pork.ast.NodeVisitor
import gay.pizza.pork.ast.visit
import gay.pizza.pork.evaluator.CallableFunction
import gay.pizza.pork.evaluator.Evaluator
import gay.pizza.pork.evaluator.InternalNativeProvider
import gay.pizza.pork.evaluator.Scope
import gay.pizza.pork.ffi.JavaAutogenContentSource
import gay.pizza.pork.frontend.ContentSource