// TARGET_BACKEND: JVM // WITH_STDLIB // FULL_JDK // JVM_TARGET: 1.8 interface SymbolOwner> interface Symbol> interface ReceiverValue { val type: String } class ImplicitReceiverValue>(val boundSymbol: S?, override val type: String) : ReceiverValue abstract class ImplicitReceiverStack : Iterable> { abstract operator fun get(name: String?): ImplicitReceiverValue<*>? } class PersistentImplicitReceiverStack( private val stack: List> ) : ImplicitReceiverStack(), Iterable> { override operator fun iterator(): Iterator> { return stack.iterator() } override operator fun get(name: String?): ImplicitReceiverValue<*>? { return stack.lastOrNull() } } fun bar(s: String) {} fun foo(stack: PersistentImplicitReceiverStack) { stack.forEach { it.boundSymbol bar(it.type) } } fun box(): String { val stack = PersistentImplicitReceiverStack( listOf(ImplicitReceiverValue(null, "O"), ImplicitReceiverValue(null, "K")) ) foo(stack) return stack.first().type + stack[null]?.type }