-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPLangContext.kt
37 lines (27 loc) · 1.18 KB
/
PLangContext.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package org.plang
import org.plang.ast.function.*
class PLangContext(
initialVariables: Map<String, Any?> = mapOf(),
val functionRegistry: FunctionRegistry = FunctionRegistry()
) {
val variables = mutableMapOf<String, Any?>()
init {
variables.putAll(initialVariables)
defaultFunctions()
}
private fun defaultFunctions() {
functionRegistry.register("out", KtFunction({ arg: String ->
println(arg)
}))
}
fun addFunction(name: String, function: PLangFunction) = functionRegistry.register(name, function)
fun addFunction(name: String, function: fun0) = functionRegistry.register(name, KtFunction(function))
fun addFunction(name: String, function: fun1) = functionRegistry.register(name, KtFunction(function))
fun addFunction(name: String, function: fun2) = functionRegistry.register(name, KtFunction(function))
fun callFunction(name: String, args: List<Any>) = functionRegistry.callFunction(name, args, this)
fun addVariable(name: String, value: Any?) {
variables[name] = value
}
fun getVariable(name: String) =
variables[name] ?: throw RuntimeException("Variable $name not found")
}