// IGNORE_BACKEND_FIR: JVM_IR interface ISized { val size : Int } interface javaUtilIterator : Iterator { fun remove() : Unit { throw UnsupportedOperationException() } } class MyIterator(val array : ReadOnlyArray) : javaUtilIterator { private var index = 0 override fun hasNext() : Boolean = index < array.size override fun next() : T = array.get(index++) } interface ReadOnlyArray : ISized, Iterable { operator fun get(index : Int) : T override fun iterator() : Iterator = MyIterator(this) } interface WriteOnlyArray : ISized { operator fun set(index : Int, value : T) : Unit operator fun set(from: Int, count: Int, value: T) { for(i in from..from+count-1) { set(i, value) } } } class MutableArray(length: Int, init : (Int) -> T) : ReadOnlyArray, WriteOnlyArray { private val array = Array(length, init) override fun get(index : Int) : T = array[index] as T override fun set(index : Int, value : T) : Unit { array[index] = value } override val size : Int get() = array.size } fun box() : String { var a = MutableArray (4, {0}) a [0] = 10 a.set(1, 2, 13) a [3] = 40 a.iterator() a.iterator().hasNext() for(el in a) { val fl = el } return "OK" }