Iterative call chain handling to get rid of JetTypeInfoInsideCallChain and other nasty things #KT-9754 Fixed

This commit is contained in:
Mikhail Glukhikh
2015-10-26 17:33:10 +03:00
parent 16b6bccd1e
commit d2c65a5336
6 changed files with 152 additions and 112 deletions
@@ -0,0 +1,13 @@
class Your
fun Your.foo() = Any()
fun <T> T?.let(f: (T) -> Unit) {
if (this != null) f(<!DEBUG_INFO_SMARTCAST!>this<!>)
}
fun test(your: Your?) {
(your?.foo() as? Any)?.let {}
// strange smart cast to 'Your' at this point
your<!UNSAFE_CALL!>.<!>hashCode()
}
@@ -0,0 +1,12 @@
package
public fun test(/*0*/ your: Your?): kotlin.Unit
public fun Your.foo(): kotlin.Any
public fun </*0*/ T> T?.let(/*0*/ f: (T) -> kotlin.Unit): kotlin.Unit
public final class Your {
public constructor Your()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}