interface IBase { abstract fun foo(x: Int, s: String) abstract fun bar(): Int abstract fun String.qux() } object BaseImpl : IBase { private constructor() /* primary */ { super/*Any*/() /* () */ } override fun foo(x: Int, s: String) { } override fun bar(): Int { return 42 } override fun String.qux() { } } interface IOther { abstract val x: String abstract get abstract var y: Int abstract get abstract set abstract val Byte.z1: Int abstract get abstract var Byte.z2: Int abstract get abstract set } fun otherImpl(x0: String, y0: Int): IOther { return { // BLOCK local class : IOther { constructor() /* primary */ { super/*Any*/() /* () */ } override val x: String field = x0 override get override var y: Int field = y0 override get override set override val Byte.z1: Int override get(): Int { return 1 } override var Byte.z2: Int override get(): Int { return 2 } override set(value: Int) { } } () } } class Test1 : IBase { constructor() /* primary */ { super/*Any*/() /* () */ } override fun foo(x: Int, s: String) { .#$$delegate_0.foo(x = x, s = s) } override fun bar(): Int { return .#$$delegate_0.bar() } override fun String.qux() { (.#$$delegate_0, ).qux() } private /* final field */ val $$delegate_0: BaseImpl = BaseImpl } class Test2 : IBase, IOther { constructor() /* primary */ { super/*Any*/() /* () */ } override fun foo(x: Int, s: String) { .#$$delegate_0.foo(x = x, s = s) } override fun bar(): Int { return .#$$delegate_0.bar() } override fun String.qux() { (.#$$delegate_0, ).qux() } private /* final field */ val $$delegate_0: BaseImpl = BaseImpl override val x: String override get(): String { return .#$$delegate_1.() } override var y: Int override get(): Int { return .#$$delegate_1.() } override set(: Int) { .#$$delegate_1.( = ) } override val Byte.z1: Int override get(): Int { return (.#$$delegate_1, ).() } override var Byte.z2: Int override get(): Int { return (.#$$delegate_1, ).() } override set(: Int) { (.#$$delegate_1, ).( = ) } private /* final field */ val $$delegate_1: IOther = otherImpl(x0 = "", y0 = 42) }