Add base support for invoking custom functions (arguments' evaluating is still not supported)

This commit is contained in:
2020-03-11 21:20:06 +01:00
parent 6264be6573
commit 7d61756273
9 changed files with 49 additions and 6 deletions

View File

@@ -3,6 +3,8 @@ package io.smnp.callable.function
import io.smnp.dsl.ast.model.node.FunctionDefinitionArgumentsNode
import io.smnp.dsl.ast.model.node.FunctionDefinitionNode
import io.smnp.dsl.ast.model.node.IdentifierNode
import io.smnp.evaluation.evaluator.BlockEvaluator
import io.smnp.evaluation.model.exception.Return
import io.smnp.type.model.Value
object CustomFunction {
@@ -13,10 +15,17 @@ object CustomFunction {
override fun define(new: FunctionDefinitionTool) {
val (_, argumentsNode, bodyNode) = node
val signature = FunctionSignatureParser.parseSignature(argumentsNode as FunctionDefinitionArgumentsNode)
val evaluator = BlockEvaluator()
new function signature define { env, args ->
new function signature body { env, args ->
val boundArguments = FunctionEnvironmentProvider.provideEnvironment(argumentsNode, args, env)
// TODO(Implement bodyNode evaluation)
// TODO push boundArguments to variables scope
try {
evaluator.evaluate(bodyNode, env)
} catch(value: Return) {
return@body value.value
}
Value.void()
}
}