Step 24: remove assign scope slot

This commit is contained in:
sergeych committed 2026-02-09 20:42:02 +03:00
1 parent 6aa23e8ef3
commit dab0b9f165
8 files changed
+71 -87

No files matched your search

@@ -18,10 +18,12 @@
import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.Compiler
import net.sergeych.lyng.ExecutionError
import net.sergeych.lyng.Pos
import net.sergeych.lyng.Script
import net.sergeych.lyng.ScriptError
import net.sergeych.lyng.Source
import net.sergeych.lyng.eval
import net.sergeych.lyng.toSource
import net.sergeych.lyng.obj.toInt
import kotlin.test.Test
import kotlin.test.assertEquals
@@ -218,6 +220,29 @@ class BytecodeRecentOpsTest {
)
}
@Test
fun delegatedLocalDisasmUsesDelegateOps() = runTest {
val script = """
class BoxDelegate(var v) : Delegate {
override fun getValue(thisRef: Object, name: String): Object = v
override fun setValue(thisRef: Object, name: String, value: Object) { v = value }
}
fun calc() {
var x by BoxDelegate(1)
x += 2
x++
return x
}
""".trimIndent()
val compiled = Compiler.compile(script.toSource(), Script.defaultImportManager)
val scope = Script.defaultImportManager.newModuleAt(Pos.builtIn)
compiled.execute(scope)
val disasm = scope.disassembleSymbol("calc")
assertTrue(disasm.contains("DELEGATED_GET_LOCAL"), disasm)
assertTrue(disasm.contains("DELEGATED_SET_LOCAL"), disasm)
assertTrue(disasm.contains("DECL_DELEGATED"), disasm)
}
@Test
fun unionMemberDispatchSubtype() = runTest {
eval(