Use fast compiled callbacks in dynamic and flow helpers

This commit is contained in:
sergeych committed 2026-04-21 18:06:31 +03:00
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> {