Refine variable resolution logic, update type alias syntax

This commit is contained in:
sergeych committed 2026-02-17 08:17:57 +03:00
1 parent b6851b7098
commit df19524177
4 files changed
+37 -7

No files matched your search

@@ -7063,9 +7063,24 @@ class BytecodeCompiler(
private fun isKnownClassReceiver(ref: ObjRef): Boolean {
return when (ref) {
is LocalVarRef -> knownClassNames.contains(ref.name) && !knownObjectNames.contains(ref.name)
is LocalSlotRef -> knownClassNames.contains(ref.name) && !knownObjectNames.contains(ref.name)
is FastLocalVarRef -> knownClassNames.contains(ref.name) && !knownObjectNames.contains(ref.name)
is LocalVarRef -> {
val name = ref.name
if (localSlotIndexByName.containsKey(name)) return false
if (localSlotInfoMap.values.any { it.name == name }) return false
knownClassNames.contains(name) && !knownObjectNames.contains(name)
}
is LocalSlotRef -> {
val name = ref.name
if (localSlotIndexByName.containsKey(name)) return false
if (localSlotInfoMap.values.any { it.name == name }) return false
knownClassNames.contains(name) && !knownObjectNames.contains(name)
}
is FastLocalVarRef -> {
val name = ref.name
if (localSlotIndexByName.containsKey(name)) return false
if (localSlotInfoMap.values.any { it.name == name }) return false
knownClassNames.contains(name) && !knownObjectNames.contains(name)
}
else -> false
}
}
@@ -157,4 +157,19 @@ class StdlibTest {
"""
)
}
@Test
fun testFilter3() = runTest {
eval("""
type Numeric = Int | Real
fun process<T: Numeric>(items: List<T>): List<T> {
items.filter { it > 0 }.map { it * it }
}
val data: List<Int> = [-2, -1, 0, 1, 2]
println("Processed: " + process(data))
""".trimIndent())
}
}