// DONT_TARGET_EXACT_BACKEND: WASM // WASM_MUTE_REASON: UNKNOWN // Enable for JVM backend when KT-8120 gets fixed // IGNORE_BACKEND: JVM fun box(): String { val capturedInConstructor = 1 val capturedInBody = 10 var log = "" class A(var x: Int) { var y = 0 fun copy(): A { log += "A.copy;" val result = A(x) result.y += capturedInBody return result } init { log += "A.;" y += x + capturedInConstructor } } val a = A(100).copy() if (a.y != 111) return "fail1a: ${a.y}" if (a.x != 100) return "fail1b: ${a.x}" class B(var x: Int) { var y = 0 fun copier(): () -> B { log += "B.copier;" return { log += "B.copy;" val result = B(x) result.y += capturedInBody result } } init { y += x + capturedInConstructor log += "B.;" } } val b = B(100).copier()() if (b.y != 111) return "fail2a: ${b.y}" if (b.x != 100) return "fail2b: ${b.x}" class C(var x: Int) { var y = 0 inner class D() { fun copyOuter(): C { log += "D.copyOuter;" val result = C(x) result.y += capturedInBody return result } } init { log += "C.;" y += x + capturedInConstructor } } val c = C(100).D().copyOuter() if (c.y != 111) return "fail3a: ${c.y}" if (c.x != 100) return "fail3b: ${c.x}" if (log != "A.;A.copy;A.;B.;B.copier;B.copy;B.;C.;D.copyOuter;C.;") return "fail_log: $log" return "OK" }