JVM IR: lookup symbols by name in ProgressionHandlers in known classes only

Alternatively, we could improve the lookup utilities and their usages to
always find the exact override of a symbol from
Collection/Iterable/CharSequence/etc, but since we need to load the
original symbol anyway in cases when the loop subject's type is a type
parameter, we might as well simplify everything and always reference the
original symbol.

Also improve exception message and removed unused declarations in
IrBackendUtils.kt.
This commit is contained in:
Alexander Udalov
2019-11-29 13:15:12 +01:00
parent 359e49fa02
commit 025360edc4
16 changed files with 221 additions and 39 deletions
@@ -0,0 +1,20 @@
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_RUNTIME
// KJS_WITH_FULL_RUNTIME
class C : Iterable<String> {
// Unused declaration, which is here only to confuse the backend who might lookup symbols by name
private fun List<Int>.iterator(): Double = size.toDouble()
override fun iterator(): Iterator<String> = listOf("OK").iterator()
}
fun box(): String {
val c = C()
for ((i, x) in c.withIndex()) {
if (i == 0) {
return x
}
}
return "Fail"
}