diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxInlineCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxInlineCodegenTestGenerated.java index c47743be424..0b922a8a0e3 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxInlineCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxInlineCodegenTestGenerated.java @@ -2602,6 +2602,30 @@ public class FirBlackBoxInlineCodegenTestGenerated extends AbstractFirBlackBoxIn runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("innerInlineFunCapturesOuterByAnotherInlineFun.kt") + public void testInnerInlineFunCapturesOuterByAnotherInlineFun() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterDeep.kt") + public void testInnerInlineFunCapturesOuterDeep() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterFunRef.kt") + public void testInnerInlineFunCapturesOuterFunRef() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterWithInlineClass.kt") + public void testInnerInlineFunCapturesOuterWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt"); + } + @Test @TestMetadata("innerLambda.kt") public void testInnerLambda() throws Exception { diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt index 213d29e48fe..6d7323e87c4 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/inline/FunctionInlining.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext import org.jetbrains.kotlin.backend.common.ScopeWithIr import org.jetbrains.kotlin.backend.common.ir.Symbols import org.jetbrains.kotlin.backend.common.ir.isPure +import org.jetbrains.kotlin.backend.common.lower.InnerClassesSupport import org.jetbrains.kotlin.backend.common.lower.at import org.jetbrains.kotlin.backend.common.lower.createIrBuilder import org.jetbrains.kotlin.builtins.StandardNames @@ -26,10 +27,7 @@ import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.symbols.IrValueSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrReturnableBlockSymbolImpl -import org.jetbrains.kotlin.ir.types.IrSimpleType -import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.ir.types.isNullable -import org.jetbrains.kotlin.ir.types.typeOrNull +import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.IrElementVisitor @@ -75,10 +73,16 @@ open class DefaultInlineFunctionResolver(open val context: CommonBackendContext) class FunctionInlining( val context: CommonBackendContext, - val inlineFunctionResolver: InlineFunctionResolver + val inlineFunctionResolver: InlineFunctionResolver, + val innerClassesSupport: InnerClassesSupport? = null ) : IrElementTransformerVoidWithContext(), BodyLoweringPass { - constructor(context: CommonBackendContext) : this(context, DefaultInlineFunctionResolver(context)) + constructor(context: CommonBackendContext) : this(context, DefaultInlineFunctionResolver(context), null) + constructor(context: CommonBackendContext, innerClassesSupport: InnerClassesSupport) : this( + context, + DefaultInlineFunctionResolver(context), + innerClassesSupport + ) private var containerScope: ScopeWithIr? = null @@ -146,7 +150,6 @@ class FunctionInlining( fun inline() = inlineFunction(callSite, callee, true) - private fun inlineFunction( callSite: IrFunctionAccessExpression, callee: IrFunction, @@ -407,6 +410,40 @@ class FunctionInlining( } } + + private fun ParameterToArgument.andAllOuterClasses(): List { + val allParametersReplacements = mutableListOf(this) + + if (innerClassesSupport == null) return allParametersReplacements + + var currentThisSymbol = parameter.symbol + var parameterClassDeclaration = parameter.type.classifierOrNull?.owner as? IrClass ?: return allParametersReplacements + + while (parameterClassDeclaration.isInner) { + val outerClass = parameterClassDeclaration.parentAsClass + val outerClassThis = outerClass.thisReceiver ?: error("${outerClass.name} has a null `thisReceiver` property") + + val parameterToArgument = ParameterToArgument( + parameter = outerClassThis, + argumentExpression = IrGetFieldImpl( + UNDEFINED_OFFSET, + UNDEFINED_OFFSET, + innerClassesSupport.getOuterThisField(parameterClassDeclaration).symbol, + outerClassThis.type, + IrGetValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, currentThisSymbol) + ) + ) + + allParametersReplacements.add(parameterToArgument) + + currentThisSymbol = outerClassThis.symbol + parameterClassDeclaration = outerClass + } + + + return allParametersReplacements + } + // callee might be a copied version of callsite.symbol.owner private fun buildParameterToArgument(callSite: IrFunctionAccessExpression, callee: IrFunction): List { @@ -416,7 +453,7 @@ class FunctionInlining( parameterToArgument += ParameterToArgument( parameter = callee.dispatchReceiverParameter!!, argumentExpression = callSite.dispatchReceiver!! - ) + ).andAllOuterClasses() val valueArguments = callSite.symbol.owner.valueParameters.map { callSite.getValueArgument(it.index) }.toMutableList() diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt index bdae36031d3..bf8613a8a1d 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt @@ -249,7 +249,7 @@ private val wrapInlineDeclarationsWithReifiedTypeParametersLowering = makeBodyLo ) private val functionInliningPhase = makeBodyLoweringPhase( - ::FunctionInlining, + { FunctionInlining(it, it.innerClassesSupport) }, name = "FunctionInliningPhase", description = "Perform function inlining", prerequisite = setOf( diff --git a/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt b/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt index fdd5033bfb7..0c27a51a8f9 100644 --- a/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt +++ b/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JS_IR // FILE: 1.kt class E(val x: String) { inner class Inner { diff --git a/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt b/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt new file mode 100644 index 00000000000..a99df58d0fc --- /dev/null +++ b/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt @@ -0,0 +1,15 @@ +// FILE: 1.kt +class Outer(val a: String) { + inner class Inner(val b: String) { + inline fun bar() = b + } + inline fun foo(i: Inner) = a + i.bar() +} +// FILE: 2.kt + +fun box(): String { + val outer = Outer("O") + val inner = outer.Inner("K") + + return outer.foo(inner) +} diff --git a/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt b/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt new file mode 100644 index 00000000000..ee8d7ee9a13 --- /dev/null +++ b/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt @@ -0,0 +1,19 @@ +// FILE: 1.kt +class O(val a: String) { + inner class I1(val b: String) { + inner class I2(val c: String) { + inner class I3(val d: String) { + inline fun foo(e: String) = "$a $b $c $d$e" + } + } + } +} + +// FILE: 2.kt +fun box(): String { + val result = O("A").I1("lot").I2("of").I3("layers").foo("!") + + if (result != "A lot of layers!") return "fail: result is $result" + + return "OK" +} diff --git a/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt b/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt new file mode 100644 index 00000000000..bd0777c6030 --- /dev/null +++ b/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt @@ -0,0 +1,11 @@ +// FILE: 1.kt +class E(val x: String) { + fun bar() = x + inner class Inner { + inline fun foo() = this@E::bar + } +} + +// FILE: 2.kt + +fun box() = E("OK").Inner().foo()() diff --git a/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt b/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt new file mode 100644 index 00000000000..97741615816 --- /dev/null +++ b/compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt @@ -0,0 +1,12 @@ +// FILE: 1.kt +class E(val x: T) { + inner class Inner { + inline fun foo(): T = x + } +} + +// FILE: 2.kt + +inline class IC(val s: String) + +fun box(): String = E(IC("OK")).Inner().foo().s diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxInlineCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxInlineCodegenTestGenerated.java index e77a02e7a3e..1bcf7f5feaf 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxInlineCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxInlineCodegenTestGenerated.java @@ -2602,6 +2602,30 @@ public class BlackBoxInlineCodegenTestGenerated extends AbstractBlackBoxInlineCo runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("innerInlineFunCapturesOuterByAnotherInlineFun.kt") + public void testInnerInlineFunCapturesOuterByAnotherInlineFun() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterDeep.kt") + public void testInnerInlineFunCapturesOuterDeep() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterFunRef.kt") + public void testInnerInlineFunCapturesOuterFunRef() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterWithInlineClass.kt") + public void testInnerInlineFunCapturesOuterWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt"); + } + @Test @TestMetadata("innerLambda.kt") public void testInnerLambda() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/CompileKotlinAgainstInlineKotlinTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/CompileKotlinAgainstInlineKotlinTestGenerated.java index 612778ef228..fec08646f54 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/CompileKotlinAgainstInlineKotlinTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/CompileKotlinAgainstInlineKotlinTestGenerated.java @@ -2602,6 +2602,30 @@ public class CompileKotlinAgainstInlineKotlinTestGenerated extends AbstractCompi runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("innerInlineFunCapturesOuterByAnotherInlineFun.kt") + public void testInnerInlineFunCapturesOuterByAnotherInlineFun() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterDeep.kt") + public void testInnerInlineFunCapturesOuterDeep() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterFunRef.kt") + public void testInnerInlineFunCapturesOuterFunRef() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterWithInlineClass.kt") + public void testInnerInlineFunCapturesOuterWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt"); + } + @Test @TestMetadata("innerLambda.kt") public void testInnerLambda() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxInlineCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxInlineCodegenTestGenerated.java index ad36f72741e..277f62a2bb6 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxInlineCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxInlineCodegenTestGenerated.java @@ -2602,6 +2602,30 @@ public class IrBlackBoxInlineCodegenTestGenerated extends AbstractIrBlackBoxInli runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("innerInlineFunCapturesOuterByAnotherInlineFun.kt") + public void testInnerInlineFunCapturesOuterByAnotherInlineFun() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterDeep.kt") + public void testInnerInlineFunCapturesOuterDeep() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterFunRef.kt") + public void testInnerInlineFunCapturesOuterFunRef() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterWithInlineClass.kt") + public void testInnerInlineFunCapturesOuterWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt"); + } + @Test @TestMetadata("innerLambda.kt") public void testInnerLambda() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrCompileKotlinAgainstInlineKotlinTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrCompileKotlinAgainstInlineKotlinTestGenerated.java index 3a1b609984d..de42794e8ac 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrCompileKotlinAgainstInlineKotlinTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrCompileKotlinAgainstInlineKotlinTestGenerated.java @@ -2602,6 +2602,30 @@ public class IrCompileKotlinAgainstInlineKotlinTestGenerated extends AbstractIrC runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("innerInlineFunCapturesOuterByAnotherInlineFun.kt") + public void testInnerInlineFunCapturesOuterByAnotherInlineFun() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterDeep.kt") + public void testInnerInlineFunCapturesOuterDeep() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterFunRef.kt") + public void testInnerInlineFunCapturesOuterFunRef() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterWithInlineClass.kt") + public void testInnerInlineFunCapturesOuterWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt"); + } + @Test @TestMetadata("innerLambda.kt") public void testInnerLambda() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrSerializeCompileKotlinAgainstInlineKotlinTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrSerializeCompileKotlinAgainstInlineKotlinTestGenerated.java index 0acb274814f..e1f0e97d275 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrSerializeCompileKotlinAgainstInlineKotlinTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrSerializeCompileKotlinAgainstInlineKotlinTestGenerated.java @@ -2602,6 +2602,30 @@ public class IrSerializeCompileKotlinAgainstInlineKotlinTestGenerated extends Ab runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("innerInlineFunCapturesOuterByAnotherInlineFun.kt") + public void testInnerInlineFunCapturesOuterByAnotherInlineFun() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterDeep.kt") + public void testInnerInlineFunCapturesOuterDeep() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterFunRef.kt") + public void testInnerInlineFunCapturesOuterFunRef() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterWithInlineClass.kt") + public void testInnerInlineFunCapturesOuterWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt"); + } + @Test @TestMetadata("innerLambda.kt") public void testInnerLambda() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/JvmIrAgainstOldBoxInlineTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/JvmIrAgainstOldBoxInlineTestGenerated.java index 35bca27c977..62c8197eea5 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/JvmIrAgainstOldBoxInlineTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/JvmIrAgainstOldBoxInlineTestGenerated.java @@ -2602,6 +2602,30 @@ public class JvmIrAgainstOldBoxInlineTestGenerated extends AbstractJvmIrAgainstO runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("innerInlineFunCapturesOuterByAnotherInlineFun.kt") + public void testInnerInlineFunCapturesOuterByAnotherInlineFun() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterDeep.kt") + public void testInnerInlineFunCapturesOuterDeep() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterFunRef.kt") + public void testInnerInlineFunCapturesOuterFunRef() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterWithInlineClass.kt") + public void testInnerInlineFunCapturesOuterWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt"); + } + @Test @TestMetadata("innerLambda.kt") public void testInnerLambda() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/JvmOldAgainstIrBoxInlineTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/JvmOldAgainstIrBoxInlineTestGenerated.java index 8731cc5dc53..d314d478025 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/JvmOldAgainstIrBoxInlineTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/JvmOldAgainstIrBoxInlineTestGenerated.java @@ -2602,6 +2602,30 @@ public class JvmOldAgainstIrBoxInlineTestGenerated extends AbstractJvmOldAgainst runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt"); } + @Test + @TestMetadata("innerInlineFunCapturesOuterByAnotherInlineFun.kt") + public void testInnerInlineFunCapturesOuterByAnotherInlineFun() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterDeep.kt") + public void testInnerInlineFunCapturesOuterDeep() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterFunRef.kt") + public void testInnerInlineFunCapturesOuterFunRef() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterWithInlineClass.kt") + public void testInnerInlineFunCapturesOuterWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt"); + } + @Test @TestMetadata("innerLambda.kt") public void testInnerLambda() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenInlineES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenInlineES6TestGenerated.java index 499e220a4e1..04fc5530a68 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenInlineES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenInlineES6TestGenerated.java @@ -2100,6 +2100,26 @@ public class IrJsCodegenInlineES6TestGenerated extends AbstractIrJsCodegenInline public void testInnerInlineFunCapturesOuter() throws Exception { runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt"); } + + @TestMetadata("innerInlineFunCapturesOuterByAnotherInlineFun.kt") + public void testInnerInlineFunCapturesOuterByAnotherInlineFun() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt"); + } + + @TestMetadata("innerInlineFunCapturesOuterDeep.kt") + public void testInnerInlineFunCapturesOuterDeep() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt"); + } + + @TestMetadata("innerInlineFunCapturesOuterFunRef.kt") + public void testInnerInlineFunCapturesOuterFunRef() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt"); + } + + @TestMetadata("innerInlineFunCapturesOuterWithInlineClass.kt") + public void testInnerInlineFunCapturesOuterWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt"); + } } @TestMetadata("compiler/testData/codegen/boxInline/invokedynamic") diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenInlineTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenInlineTestGenerated.java index f22e9d7dc2d..897866e71d5 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenInlineTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenInlineTestGenerated.java @@ -2100,6 +2100,26 @@ public class IrJsCodegenInlineTestGenerated extends AbstractIrJsCodegenInlineTes public void testInnerInlineFunCapturesOuter() throws Exception { runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt"); } + + @TestMetadata("innerInlineFunCapturesOuterByAnotherInlineFun.kt") + public void testInnerInlineFunCapturesOuterByAnotherInlineFun() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt"); + } + + @TestMetadata("innerInlineFunCapturesOuterDeep.kt") + public void testInnerInlineFunCapturesOuterDeep() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt"); + } + + @TestMetadata("innerInlineFunCapturesOuterFunRef.kt") + public void testInnerInlineFunCapturesOuterFunRef() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt"); + } + + @TestMetadata("innerInlineFunCapturesOuterWithInlineClass.kt") + public void testInnerInlineFunCapturesOuterWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt"); + } } @TestMetadata("compiler/testData/codegen/boxInline/invokedynamic") diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testNew/JsCodegenInlineTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testNew/JsCodegenInlineTestGenerated.java index 62fc124434d..a7f925f8a99 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testNew/JsCodegenInlineTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/testNew/JsCodegenInlineTestGenerated.java @@ -2319,6 +2319,30 @@ public class JsCodegenInlineTestGenerated extends AbstractJsCodegenInlineTest { public void testInnerInlineFunCapturesOuter() throws Exception { runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuter.kt"); } + + @Test + @TestMetadata("innerInlineFunCapturesOuterByAnotherInlineFun.kt") + public void testInnerInlineFunCapturesOuterByAnotherInlineFun() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterByAnotherInlineFun.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterDeep.kt") + public void testInnerInlineFunCapturesOuterDeep() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterDeep.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterFunRef.kt") + public void testInnerInlineFunCapturesOuterFunRef() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterFunRef.kt"); + } + + @Test + @TestMetadata("innerInlineFunCapturesOuterWithInlineClass.kt") + public void testInnerInlineFunCapturesOuterWithInlineClass() throws Exception { + runTest("compiler/testData/codegen/boxInline/innerClasses/innerInlineFunCapturesOuterWithInlineClass.kt"); + } } @Nested