Stop subtyping constraint search if equality constraints for...

all not fixed type vars are found
#KT-35626 fixed
This commit is contained in:
Ilya Chernikov
2020-02-21 16:39:52 +01:00
parent b6c9432334
commit 70c89a28e1
46 changed files with 211 additions and 63 deletions
@@ -0,0 +1,24 @@
// FIR_IDENTICAL
// !LANGUAGE: +NewInference
// !DIAGNOSTICS: -UNUSED_PARAMETER
class Result<T> {
fun <R> map(transform: (T) -> R): Result<R> = TODO()
}
class Tuple12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(
val _1: T1, val _2: T2, val _3: T3, val _4: T4, val _5: T5, val _6: T6,
val _7: T7, val _8: T8, val _9: T9, val _10: T10, val _11: T11, val _12: T12, val _13: T13
)
fun <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> rules12(res: Result<Any>):
Result<Tuple12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>> {
return res.map {
@Suppress("UNCHECKED_CAST")
Tuple12(
it as T1, it as T2, it as T3, it as T4, it as T5, it as T6,
it as T7, it as T8, it as T9, it as T10, it as T11, it as T12, it as T13
)
}
}
@@ -0,0 +1,31 @@
package
public fun </*0*/ T1, /*1*/ T2, /*2*/ T3, /*3*/ T4, /*4*/ T5, /*5*/ T6, /*6*/ T7, /*7*/ T8, /*8*/ T9, /*9*/ T10, /*10*/ T11, /*11*/ T12, /*12*/ T13> rules12(/*0*/ res: Result<kotlin.Any>): Result<Tuple12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>>
public final class Result</*0*/ T> {
public constructor Result</*0*/ T>()
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 final fun </*0*/ R> map(/*0*/ transform: (T) -> R): Result<R>
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Tuple12</*0*/ T1, /*1*/ T2, /*2*/ T3, /*3*/ T4, /*4*/ T5, /*5*/ T6, /*6*/ T7, /*7*/ T8, /*8*/ T9, /*9*/ T10, /*10*/ T11, /*11*/ T12, /*12*/ T13> {
public constructor Tuple12</*0*/ T1, /*1*/ T2, /*2*/ T3, /*3*/ T4, /*4*/ T5, /*5*/ T6, /*6*/ T7, /*7*/ T8, /*8*/ T9, /*9*/ T10, /*10*/ T11, /*11*/ T12, /*12*/ T13>(/*0*/ _1: T1, /*1*/ _2: T2, /*2*/ _3: T3, /*3*/ _4: T4, /*4*/ _5: T5, /*5*/ _6: T6, /*6*/ _7: T7, /*7*/ _8: T8, /*8*/ _9: T9, /*9*/ _10: T10, /*10*/ _11: T11, /*11*/ _12: T12, /*12*/ _13: T13)
public final val _1: T1
public final val _10: T10
public final val _11: T11
public final val _12: T12
public final val _13: T13
public final val _2: T2
public final val _3: T3
public final val _4: T4
public final val _5: T5
public final val _6: T6
public final val _7: T7
public final val _8: T8
public final val _9: T9
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
}
@@ -0,0 +1,22 @@
// FIR_IDENTICAL
// !LANGUAGE: +NewInference
// !DIAGNOSTICS: -UNUSED_PARAMETER
class Result<T> {
fun <R> map(transform: (T) -> R): Result<R> = TODO()
}
class TupleX<T1, T2, T3, T4>(
val _1: T1, val _2: T2, val _3: T3, val _4: T4
)
fun <K1, K2, K3, K4> rules(res: Result<Any>):
Result<TupleX<K1, K2, K3, K4>> {
return res.map {
@Suppress("UNCHECKED_CAST")
TupleX(
it as K1, it as K2, it as K3, it as K4
)
}
}
@@ -0,0 +1,22 @@
package
public fun </*0*/ K1, /*1*/ K2, /*2*/ K3, /*3*/ K4> rules(/*0*/ res: Result<kotlin.Any>): Result<TupleX<K1, K2, K3, K4>>
public final class Result</*0*/ T> {
public constructor Result</*0*/ T>()
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 final fun </*0*/ R> map(/*0*/ transform: (T) -> R): Result<R>
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class TupleX</*0*/ T1, /*1*/ T2, /*2*/ T3, /*3*/ T4> {
public constructor TupleX</*0*/ T1, /*1*/ T2, /*2*/ T3, /*3*/ T4>(/*0*/ _1: T1, /*1*/ _2: T2, /*2*/ _3: T3, /*3*/ _4: T4)
public final val _1: T1
public final val _2: T2
public final val _3: T3
public final val _4: T4
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
}