c5160a6a95
Some methods (like `size` from kotlin.collections.Collection) have special rules for mapping and overriding. For example, when we call `size`, normally there will be `INVOKEVIRTUAL size()` in the bytecode, but for inline classes it should be `INVOKESTATIC ...$Erased.getSize()`
21 lines
586 B
Kotlin
Vendored
21 lines
586 B
Kotlin
Vendored
// !LANGUAGE: +InlineClasses
|
|
|
|
inline class UInt(val x: Int)
|
|
|
|
inline class UIntArray(private val storage: IntArray) : Collection<UInt> {
|
|
public override val size: Int get() = storage.size
|
|
|
|
override operator fun iterator() = TODO()
|
|
override fun contains(element: UInt): Boolean = TODO()
|
|
override fun containsAll(elements: Collection<UInt>): Boolean = TODO()
|
|
override fun isEmpty(): Boolean = TODO()
|
|
}
|
|
|
|
fun calculate(u: UIntArray): Int {
|
|
return u.size
|
|
}
|
|
|
|
fun box(): String {
|
|
if (calculate(UIntArray(intArrayOf(1, 2, 3, 4))) != 4) return "Fail"
|
|
return "OK"
|
|
} |