Step 19: union member access

This commit is contained in:
sergeych committed 2026-02-09 11:38:04 +03:00
1 parent 5305ced89f
commit 565dbf98ed
3 files changed
+182 -15

No files matched your search

@@ -18,11 +18,13 @@
import kotlinx.coroutines.test.runTest
import net.sergeych.lyng.Compiler
import net.sergeych.lyng.Script
import net.sergeych.lyng.ScriptError
import net.sergeych.lyng.Source
import net.sergeych.lyng.eval
import net.sergeych.lyng.obj.toInt
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
class BytecodeRecentOpsTest {
@@ -195,6 +197,46 @@ class BytecodeRecentOpsTest {
)
}
@Test
fun unionMemberDispatchSubtype() = runTest {
eval(
"""
class A { fun who() = "A" }
class B : A { override fun who() = "B" }
fun pick(x: A | B) { x.who() }
assertEquals("B", pick(B()))
""".trimIndent()
)
}
@Test
fun objectReceiverMemberError() = runTest {
val failed = try {
eval("fun bad(x) { x.missing() }")
false
} catch (_: ScriptError) {
true
}
assertTrue(failed)
}
@Test
fun unionMissingMemberError() = runTest {
val failed = try {
eval(
"""
class A { fun who() = "A" }
class B { fun other() = "B" }
fun pick(x: A | B) { x.who() }
""".trimIndent()
)
false
} catch (_: ScriptError) {
true
}
assertTrue(failed)
}
@Test
fun qualifiedThisValueRef() = runTest {
eval(