[JVM] Introduce MF Value Classes to frontend

This commit is contained in:
Evgeniy.Zhelenskiy
2021-12-24 04:37:30 +03:00
committed by Space
parent c15b1ec001
commit 7595f798e1
26 changed files with 795 additions and 126 deletions
+167
View File
@@ -0,0 +1,167 @@
// WITH_STDLIB
// TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses
value class F1(val x: Int)
value class F2(val x: UInt)
value class F3(val x: String)
OPTIONAL_JVM_INLINE_ANNOTATION
value class F4(val x: Int)
OPTIONAL_JVM_INLINE_ANNOTATION
value class F5(val x: UInt)
OPTIONAL_JVM_INLINE_ANNOTATION
value class F6(val x: String)
value class A(
val f1: F1,
val f2: F2,
val f3: F3,
val f4: F4,
val f5: F5,
val f6: F6,
val f7: Int,
val f8: UInt,
val f9: String,
)
value class B(val a1: A, val a2: A) {
override fun toString(): String {
return "OverridenBToString(a1 = $a1, a2 = $a2)"
}
}
fun box(): String {
val f1 = F1(1)
val f2 = F2(UInt.MAX_VALUE)
val f3 = F3("234")
val f4 = F4(5)
val f5 = F5(UInt.MAX_VALUE.dec())
val f6 = F6("678")
val a1 = A(f1, f2, f3, f4, f5, f6, 9, UInt.MAX_VALUE - 2U, "0")
val a2 = a1
val b = B(a1, a2)
assert(f1.x == 1)
assert(f2.x == UInt.MAX_VALUE)
assert(f3.x == "234")
assert(f4.x == 5)
assert(f5.x == UInt.MAX_VALUE - 1U)
assert(f6.x == "678")
assert(f1 == a1.f1)
assert(f1.hashCode() == a1.f1.hashCode())
assert(f1.toString() == a1.f1.toString())
assert(f1 == a2.f1)
assert(f1.hashCode() == a2.f1.hashCode())
assert(f1.toString() == a2.f1.toString())
assert(a1.f1 == a2.f1)
assert(a1.f1.hashCode() == a2.f1.hashCode())
assert(a1.f1.toString() == a2.f1.toString())
assert(f2 == a1.f2)
assert(f2.hashCode() == a1.f2.hashCode())
assert(f2.toString() == a1.f2.toString())
assert(f2 == a2.f2)
assert(f2.hashCode() == a2.f2.hashCode())
assert(f2.toString() == a2.f2.toString())
assert(a1.f2 == a2.f2)
assert(a1.f2.hashCode() == a2.f2.hashCode())
assert(a1.f2.toString() == a2.f2.toString())
assert(f3 == a1.f3)
assert(f3.hashCode() == a1.f3.hashCode())
assert(f3.toString() == a1.f3.toString())
assert(f3 == a2.f3)
assert(f3.hashCode() == a2.f3.hashCode())
assert(f3.toString() == a2.f3.toString())
assert(a1.f3 == a2.f3)
assert(a1.f3.hashCode() == a2.f3.hashCode())
assert(a1.f3.toString() == a2.f3.toString())
assert(f4 == a1.f4)
assert(f4.hashCode() == a1.f4.hashCode())
assert(f4.toString() == a1.f4.toString())
assert(f4 == a2.f4)
assert(f4.hashCode() == a2.f4.hashCode())
assert(f4.toString() == a2.f4.toString())
assert(a1.f4 == a2.f4)
assert(a1.f4.hashCode() == a2.f4.hashCode())
assert(a1.f4.toString() == a2.f4.toString())
assert(f5 == a1.f5)
assert(f5.hashCode() == a1.f5.hashCode())
assert(f5.toString() == a1.f5.toString())
assert(f5 == a2.f5)
assert(f5.hashCode() == a2.f5.hashCode())
assert(f5.toString() == a2.f5.toString())
assert(a1.f5 == a2.f5)
assert(a1.f5.hashCode() == a2.f5.hashCode())
assert(a1.f5.toString() == a2.f5.toString())
assert(f6 == a1.f6)
assert(f6.hashCode() == a1.f6.hashCode())
assert(f6.toString() == a1.f6.toString())
assert(f6 == a2.f6)
assert(f6.hashCode() == a2.f6.hashCode())
assert(f6.toString() == a2.f6.toString())
assert(a1.f6 == a2.f6)
assert(a1.f6.hashCode() == a2.f6.hashCode())
assert(a1.f6.toString() == a2.f6.toString())
assert(9 == a1.f7)
assert(9.hashCode() == a1.f7.hashCode())
assert(9.toString() == a1.f7.toString())
assert(9 == a2.f7)
assert(9.hashCode() == a2.f7.hashCode())
assert(9.toString() == a2.f7.toString())
assert(a1.f7 == a2.f7)
assert(a1.f7.hashCode() == a2.f7.hashCode())
assert(a1.f7.toString() == a2.f7.toString())
assert((UInt.MAX_VALUE - 2U) == a1.f8)
assert((UInt.MAX_VALUE - 2U).hashCode() == a1.f8.hashCode())
assert((UInt.MAX_VALUE - 2U).toString() == a1.f8.toString())
assert((UInt.MAX_VALUE - 2U) == a2.f8)
assert((UInt.MAX_VALUE - 2U).hashCode() == a2.f8.hashCode())
assert((UInt.MAX_VALUE - 2U).toString() == a2.f8.toString())
assert(a1.f8 == a2.f8)
assert(a1.f8.hashCode() == a2.f8.hashCode())
assert(a1.f8.toString() == a2.f8.toString())
assert("0" == a1.f9)
assert("0".hashCode() == a1.f9.hashCode())
assert("0".toString() == a1.f9.toString())
assert("0" == a2.f9)
assert("0".hashCode() == a2.f9.hashCode())
assert("0".toString() == a2.f9.toString())
assert(a1.f9 == a2.f9)
assert(a1.f9.hashCode() == a2.f9.hashCode())
assert(a1.f9.toString() == a2.f9.toString())
assert(a1 == a2)
assert(a1.hashCode() == a2.hashCode())
assert(a1.toString() == a2.toString())
assert(b == b)
assert(b.toString() == b.toString())
assert(b.hashCode() == b.hashCode())
assert(f1.toString() == "to be replaced")
assert(f2.toString() == "to be replaced")
assert(f3.toString() == "to be replaced")
assert(f4.toString() == "to be replaced")
assert(f5.toString() == "to be replaced")
assert(f6.toString() == "to be replaced")
assert(a1.toString() == "to be replaced")
assert(a2.toString() == "to be replaced")
assert(b.toString() == "to be replaced")
return "OK"
}
@@ -0,0 +1,63 @@
// FIR_IDENTICAL
// WITH_STDLIB
// TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses
OPTIONAL_JVM_INLINE_ANNOTATION
value class A1(val x: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>A1<!>)
value class B1(val x: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>B1<!>, val y: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>B1<!>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class A2(val x: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>B2<!>)
value class B2(val x: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>A2<!>, val y: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>A2<!>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class A3(val x: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>B3<!>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class B3(val x: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>A3<!>)
value class A4(val x: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>B4<!>, val y: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>B4<!>)
value class B4(val x: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>A4<!>, val y: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>A4<!>)
value class C4(val x: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>D4?<!>, val y: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>D4?<!>)
value class D4(val x: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>D4?<!>, val y: <!VALUE_CLASS_CANNOT_BE_RECURSIVE!>C4?<!>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class A5<T : A5<T>>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>)
value class B5<T : B5<T>>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class A6<T : B6<<!UPPER_BOUND_VIOLATED!>T<!>>>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>)
value class B6<T : A6<<!UPPER_BOUND_VIOLATED!>T<!>>>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class A7<T : B7<<!UPPER_BOUND_VIOLATED!>T<!>>>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class B7<T : A7<<!UPPER_BOUND_VIOLATED!>T<!>>>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>)
value class A8<T : B8<<!UPPER_BOUND_VIOLATED!>T<!>>>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>)
value class B8<T : A8<<!UPPER_BOUND_VIOLATED!>T<!>>>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>)
value class A9<T : B9<<!UPPER_BOUND_VIOLATED!>T<!>>>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T?<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T?<!>)
value class B9<T : A9<<!UPPER_BOUND_VIOLATED!>T<!>>>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T?<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T?<!>)
@@ -0,0 +1,178 @@
package
public final value class A1 {
public constructor A1(/*0*/ x: A1)
public final val x: A1
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class A2 {
public constructor A2(/*0*/ x: B2)
public final val x: B2
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class A3 {
public constructor A3(/*0*/ x: B3)
public final val x: B3
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class A4 {
public constructor A4(/*0*/ x: B4, /*1*/ y: B4)
public final val x: B4
public final val y: B4
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class A5</*0*/ T : A5<T>> {
public constructor A5</*0*/ T : A5<T>>(/*0*/ x: T, /*1*/ y: T)
public final val x: T
public final val y: T
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class A6</*0*/ T : B6<T>> {
public constructor A6</*0*/ T : B6<T>>(/*0*/ x: T, /*1*/ y: T)
public final val x: T
public final val y: T
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class A7</*0*/ T : B7<T>> {
public constructor A7</*0*/ T : B7<T>>(/*0*/ x: T, /*1*/ y: T)
public final val x: T
public final val y: T
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class A8</*0*/ T : B8<T>> {
public constructor A8</*0*/ T : B8<T>>(/*0*/ x: T, /*1*/ y: T)
public final val x: T
public final val y: T
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class A9</*0*/ T : B9<T>> {
public constructor A9</*0*/ T : B9<T>>(/*0*/ x: T?, /*1*/ y: T?)
public final val x: T?
public final val y: T?
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class B1 {
public constructor B1(/*0*/ x: B1, /*1*/ y: B1)
public final val x: B1
public final val y: B1
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class B2 {
public constructor B2(/*0*/ x: A2, /*1*/ y: A2)
public final val x: A2
public final val y: A2
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class B3 {
public constructor B3(/*0*/ x: A3)
public final val x: A3
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class B4 {
public constructor B4(/*0*/ x: A4, /*1*/ y: A4)
public final val x: A4
public final val y: A4
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class B5</*0*/ T : B5<T>> {
public constructor B5</*0*/ T : B5<T>>(/*0*/ x: T, /*1*/ y: T)
public final val x: T
public final val y: T
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class B6</*0*/ T : A6<T>> {
public constructor B6</*0*/ T : A6<T>>(/*0*/ x: T, /*1*/ y: T)
public final val x: T
public final val y: T
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class B7</*0*/ T : A7<T>> {
public constructor B7</*0*/ T : A7<T>>(/*0*/ x: T, /*1*/ y: T)
public final val x: T
public final val y: T
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class B8</*0*/ T : A8<T>> {
public constructor B8</*0*/ T : A8<T>>(/*0*/ x: T, /*1*/ y: T)
public final val x: T
public final val y: T
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class B9</*0*/ T : A9<T>> {
public constructor B9</*0*/ T : A9<T>>(/*0*/ x: T?, /*1*/ y: T?)
public final val x: T?
public final val y: T?
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class C4 {
public constructor C4(/*0*/ x: D4?, /*1*/ y: D4?)
public final val x: D4?
public final val y: D4?
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class D4 {
public constructor D4(/*0*/ x: D4?, /*1*/ y: C4?)
public final val x: D4?
public final val y: C4?
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
@@ -0,0 +1,42 @@
// FIR_IDENTICAL
// WITH_STDLIB
// TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses
value class Empty<T><!VALUE_CLASS_EMPTY_CONSTRUCTOR!>()<!>
OPTIONAL_JVM_INLINE_ANNOTATION
value class Foo<T>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T<!>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class FooNullable<T>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T?<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>T?<!>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class FooGenericArray<T>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>Array<T><!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>Array<T><!>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class FooGenericArray2<T>(val x: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>Array<Array<T>><!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>Array<Array<T>><!>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class FooStarProjectedArray(val x: Array<*>, val y: Array<*>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class FooStarProjectedArray2(val x: Array<Array<*>>, val y: Array<Array<*>>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class Bar(val u: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>Unit<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>Unit<!>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class BarNullable(val u: Unit?, val y: Unit?)
OPTIONAL_JVM_INLINE_ANNOTATION
value class Baz(val u: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>Nothing<!>, val y: <!VALUE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE!>Nothing<!>)
OPTIONAL_JVM_INLINE_ANNOTATION
value class BazNullable(val u: Nothing?, val y: Nothing?)
@@ -0,0 +1,98 @@
package
public final value class Bar {
public constructor Bar(/*0*/ u: kotlin.Unit, /*1*/ y: kotlin.Unit)
public final val u: kotlin.Unit
public final val y: kotlin.Unit
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class BarNullable {
public constructor BarNullable(/*0*/ u: kotlin.Unit?, /*1*/ y: kotlin.Unit?)
public final val u: kotlin.Unit?
public final val y: kotlin.Unit?
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class Baz {
public constructor Baz(/*0*/ u: kotlin.Nothing, /*1*/ y: kotlin.Nothing)
public final val u: kotlin.Nothing
public final val y: kotlin.Nothing
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class BazNullable {
public constructor BazNullable(/*0*/ u: kotlin.Nothing?, /*1*/ y: kotlin.Nothing?)
public final val u: kotlin.Nothing?
public final val y: kotlin.Nothing?
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class Empty</*0*/ T> {
public constructor Empty</*0*/ T>()
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class Foo</*0*/ T> {
public constructor Foo</*0*/ T>(/*0*/ x: T, /*1*/ y: T)
public final val x: T
public final val y: T
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class FooGenericArray</*0*/ T> {
public constructor FooGenericArray</*0*/ T>(/*0*/ x: kotlin.Array<T>, /*1*/ y: kotlin.Array<T>)
public final val x: kotlin.Array<T>
public final val y: kotlin.Array<T>
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class FooGenericArray2</*0*/ T> {
public constructor FooGenericArray2</*0*/ T>(/*0*/ x: kotlin.Array<kotlin.Array<T>>, /*1*/ y: kotlin.Array<kotlin.Array<T>>)
public final val x: kotlin.Array<kotlin.Array<T>>
public final val y: kotlin.Array<kotlin.Array<T>>
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class FooNullable</*0*/ T> {
public constructor FooNullable</*0*/ T>(/*0*/ x: T?, /*1*/ y: T?)
public final val x: T?
public final val y: T?
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class FooStarProjectedArray {
public constructor FooStarProjectedArray(/*0*/ x: kotlin.Array<*>, /*1*/ y: kotlin.Array<*>)
public final val x: kotlin.Array<*>
public final val y: kotlin.Array<*>
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final value class FooStarProjectedArray2 {
public constructor FooStarProjectedArray2(/*0*/ x: kotlin.Array<kotlin.Array<*>>, /*1*/ y: kotlin.Array<kotlin.Array<*>>)
public final val x: kotlin.Array<kotlin.Array<*>>
public final val y: kotlin.Array<kotlin.Array<*>>
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}