[Commonizer] Refactor CIR type representation

1. Drop CirClassifierId
2. Specialized classes for each kind of types (classes, TAs, type parameters, flexible types).
3. TypeCommonizer now returns commonized type. In case of TAs this could be a completely new type
   describing expect class or a new TA with the different underlying type.
This commit is contained in:
Dmitriy Dolovov
2020-10-19 20:33:23 +03:00
parent 2764550bbe
commit f5bb60f7cd
40 changed files with 818 additions and 340 deletions
@@ -40,3 +40,19 @@ expect fun functionWithTypeParametersInReturnType12(): Box<Fox>
expect fun <T> functionWithUnsubstitutedTypeParametersInReturnType1(): T
expect fun <T> functionWithUnsubstitutedTypeParametersInReturnType2(): T
expect fun <T> functionWithUnsubstitutedTypeParametersInReturnType8(): Box<T>
expect class Outer<A>() {
class Nested<B>() {
class Nested<C>()
inner class Inner<D>()
}
inner class Inner<E>() {
inner class Inner<F>()
}
}
expect fun <T> returnOuter(): Outer<T>
expect fun <T> returnOuterNested(): Outer.Nested<T>
expect fun <T> returnOuterNestedNested(): Outer.Nested.Nested<T>
expect fun <T, R> returnOuterInner(): Outer<T>.Inner<R>
expect fun <T, R, S> returnOuterInnerInner(): Outer<T>.Inner<R>.Inner<S>
@@ -61,3 +61,19 @@ fun <T> functionWithUnsubstitutedTypeParametersInReturnType6(): T = TODO()
fun <T> functionWithUnsubstitutedTypeParametersInReturnType7(): T = TODO()
actual fun <T> functionWithUnsubstitutedTypeParametersInReturnType8(): Box<T> = TODO()
fun <T> functionWithUnsubstitutedTypeParametersInReturnType9(): Box<T> = TODO()
actual class Outer<A> actual constructor() {
actual class Nested<B> actual constructor() {
actual class Nested<C> actual constructor()
actual inner class Inner<D> actual constructor()
}
actual inner class Inner<E> actual constructor() {
actual inner class Inner<F> actual constructor()
}
}
actual fun <T> returnOuter(): Outer<T> = TODO()
actual fun <T> returnOuterNested(): Outer.Nested<T> = TODO()
actual fun <T> returnOuterNestedNested(): Outer.Nested.Nested<T> = TODO()
actual fun <T, R> returnOuterInner(): Outer<T>.Inner<R> = TODO()
actual fun <T, R, S> returnOuterInnerInner(): Outer<T>.Inner<R>.Inner<S> = TODO()
@@ -61,3 +61,19 @@ fun <T, Q> functionWithUnsubstitutedTypeParametersInReturnType6(): Q = TODO()
fun functionWithUnsubstitutedTypeParametersInReturnType7(): String = TODO()
actual fun <T> functionWithUnsubstitutedTypeParametersInReturnType8(): Box<T> = TODO()
fun functionWithUnsubstitutedTypeParametersInReturnType9(): Box<String> = TODO()
actual class Outer<A> actual constructor() {
actual class Nested<B> actual constructor() {
actual class Nested<C> actual constructor()
actual inner class Inner<D> actual constructor()
}
actual inner class Inner<E> actual constructor() {
actual inner class Inner<F> actual constructor()
}
}
actual fun <T> returnOuter(): Outer<T> = TODO()
actual fun <T> returnOuterNested(): Outer.Nested<T> = TODO()
actual fun <T> returnOuterNestedNested(): Outer.Nested.Nested<T> = TODO()
actual fun <T, R> returnOuterInner(): Outer<T>.Inner<R> = TODO()
actual fun <T, R, S> returnOuterInnerInner(): Outer<T>.Inner<R>.Inner<S> = TODO()
@@ -64,3 +64,19 @@ fun <T> functionWithUnsubstitutedTypeParametersInReturnType6(): T = TODO()
fun <T> functionWithUnsubstitutedTypeParametersInReturnType7(): T = TODO()
fun <T> functionWithUnsubstitutedTypeParametersInReturnType8(): Box<T> = TODO()
fun <T> functionWithUnsubstitutedTypeParametersInReturnType9(): Box<T> = TODO()
class Outer<A> {
class Nested<B> {
class Nested<C>
inner class Inner<D>
}
inner class Inner<E> {
inner class Inner<F>
}
}
fun <T> returnOuter(): Outer<T> = TODO()
fun <T> returnOuterNested(): Outer.Nested<T> = TODO()
fun <T> returnOuterNestedNested(): Outer.Nested.Nested<T> = TODO()
fun <T, R> returnOuterInner(): Outer<T>.Inner<R> = TODO()
fun <T, R, S> returnOuterInnerInner(): Outer<T>.Inner<R>.Inner<S> = TODO()
@@ -64,3 +64,19 @@ fun <T, Q> functionWithUnsubstitutedTypeParametersInReturnType6(): Q = TODO()
fun functionWithUnsubstitutedTypeParametersInReturnType7(): String = TODO()
fun <T> functionWithUnsubstitutedTypeParametersInReturnType8(): Box<T> = TODO()
fun functionWithUnsubstitutedTypeParametersInReturnType9(): Box<String> = TODO()
class Outer<A> {
class Nested<B> {
class Nested<C>
inner class Inner<D>
}
inner class Inner<E> {
inner class Inner<F>
}
}
fun <T> returnOuter(): Outer<T> = TODO()
fun <T> returnOuterNested(): Outer.Nested<T> = TODO()
fun <T> returnOuterNestedNested(): Outer.Nested.Nested<T> = TODO()
fun <T, R> returnOuterInner(): Outer<T>.Inner<R> = TODO()
fun <T, R, S> returnOuterInnerInner(): Outer<T>.Inner<R>.Inner<S> = TODO()