Use fast compiled callbacks in dynamic and flow helpers
This commit is contained in:
1 parent
c80900c503
commit
3be2892025
5 files changed
+52
-11
No files matched your search
@@ -24,6 +24,7 @@ import net.sergeych.lyng.ScriptError
|
||||
import net.sergeych.lyng.Source
|
||||
import net.sergeych.lyng.Statement
|
||||
import net.sergeych.lyng.asFacade
|
||||
import net.sergeych.lyng.obj.ObjDynamic
|
||||
import net.sergeych.lyng.obj.ObjInt
|
||||
import net.sergeych.lyng.obj.ObjString
|
||||
import net.sergeych.lyng.obj.toInt
|
||||
@@ -181,6 +182,30 @@ class CompilerVmReviewRegressionTest {
|
||||
assertEquals(42, scope.asFacade().call(callable, Arguments(ObjInt.of(40))).toInt())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun dynamicCallbacksUsePreparedLambdaFastPath() = runTest {
|
||||
val script = Compiler.compile(
|
||||
Source(
|
||||
"<dynamic-fast-callbacks>",
|
||||
"""
|
||||
var seen = ""
|
||||
dynamic {
|
||||
get { name -> name + seen }
|
||||
set { name, value -> seen = name + "=" + value }
|
||||
}
|
||||
""".trimIndent()
|
||||
),
|
||||
Script.defaultImportManager
|
||||
)
|
||||
|
||||
val scope = Script.newScope()
|
||||
val dynamic = script.execute(scope) as ObjDynamic
|
||||
|
||||
assertEquals("foo", (dynamic.readField(scope, "foo").value as ObjString).value)
|
||||
dynamic.writeField(scope, "foo", ObjInt.of(7))
|
||||
assertEquals("barfoo=7", (dynamic.getAt(scope, ObjString("bar")) as ObjString).value)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun subjectlessWhenReportsScriptError() = runTest {
|
||||
val ex = assertFailsWith<ScriptError> {
|
||||
|
||||
Reference in new issue
Block a user