[K/N] Make classes generated from λs that use generic parameters generic

Previously, a function reference that used generic parameters from its
outer scope was lowered into a top-level non-generic subclass of
`FunctionN`, with `FunctionN` type arguments referencing type parameters
not present in the scope anymore. This sometimes resulted in generating
malformed mangled names.

From now on the generated subclass of `FunctionN` is generic. The needed
type arguments are passed upon instantiation, when the relevant generic
parameters are present in the scope.
This commit is contained in:
Sergej Jaskiewicz
2023-01-10 17:19:13 +01:00
committed by Space Team
parent 0e1350f464
commit 4a2a77d9b9
13 changed files with 133 additions and 24 deletions
@@ -6041,6 +6041,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/closures/capturedLocalGenericFun.kt");
}
@Test
@TestMetadata("closureCapturingGenericParam.kt")
public void testClosureCapturingGenericParam() throws Exception {
runTest("compiler/testData/codegen/box/closures/closureCapturingGenericParam.kt");
}
@Test
@TestMetadata("closureInsideConstrucor.kt")
public void testClosureInsideConstrucor() throws Exception {
@@ -6197,6 +6197,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/closures/capturedLocalGenericFun.kt");
}
@Test
@TestMetadata("closureCapturingGenericParam.kt")
public void testClosureCapturingGenericParam() throws Exception {
runTest("compiler/testData/codegen/box/closures/closureCapturingGenericParam.kt");
}
@Test
@TestMetadata("closureInsideConstrucor.kt")
public void testClosureInsideConstrucor() throws Exception {