Refine variable resolution logic, update type alias syntax
This commit is contained in:
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())
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user