Native: fix using nested expect enum entry in a default argument
^KT-51156 Fixed
This commit is contained in:
committed by
Space
parent
0a85f0dd34
commit
62c1bd0044
+6
@@ -28554,6 +28554,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/kt23739.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedEnumEntryValue.kt")
|
||||
public void testNestedEnumEntryValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/nestedEnumEntryValue.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("parametersInArgumentValues.kt")
|
||||
public void testParametersInArgumentValues() throws Exception {
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
// IGNORE_BACKEND: JS_IR, WASM
|
||||
// JS IR & Wasm: https://youtrack.jetbrains.com/issue/KT-51225
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
// FIR status: default argument mapping in MPP isn't designed yet
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: lib
|
||||
// FILE: common.kt
|
||||
|
||||
// KT-51156
|
||||
|
||||
expect class C(e: E = E.O) {
|
||||
enum class E {
|
||||
O, K
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: platform.kt
|
||||
|
||||
actual class C actual constructor(e: E) {
|
||||
val result = e.name
|
||||
|
||||
actual enum class E {
|
||||
O, K
|
||||
}
|
||||
}
|
||||
|
||||
// MODULE: main(lib)
|
||||
// FILE: main.kt
|
||||
|
||||
fun box(): String {
|
||||
return C().result + C(C.E.K).result
|
||||
}
|
||||
+6
@@ -28128,6 +28128,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/kt23739.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedEnumEntryValue.kt")
|
||||
public void testNestedEnumEntryValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/nestedEnumEntryValue.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("parametersInArgumentValues.kt")
|
||||
public void testParametersInArgumentValues() throws Exception {
|
||||
|
||||
+6
@@ -28554,6 +28554,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/kt23739.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedEnumEntryValue.kt")
|
||||
public void testNestedEnumEntryValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/nestedEnumEntryValue.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("parametersInArgumentValues.kt")
|
||||
public void testParametersInArgumentValues() throws Exception {
|
||||
|
||||
+5
@@ -23957,6 +23957,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/kt23739.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nestedEnumEntryValue.kt")
|
||||
public void testNestedEnumEntryValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/nestedEnumEntryValue.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("parametersInArgumentValues.kt")
|
||||
public void testParametersInArgumentValues() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/parametersInArgumentValues.kt");
|
||||
|
||||
+6
@@ -19964,6 +19964,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/kt23739.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedEnumEntryValue.kt")
|
||||
public void testNestedEnumEntryValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/nestedEnumEntryValue.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("parametersInArgumentValues.kt")
|
||||
public void testParametersInArgumentValues() throws Exception {
|
||||
|
||||
+6
@@ -19928,6 +19928,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/kt23739.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedEnumEntryValue.kt")
|
||||
public void testNestedEnumEntryValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/nestedEnumEntryValue.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("parametersInArgumentValues.kt")
|
||||
public void testParametersInArgumentValues() throws Exception {
|
||||
|
||||
+5
@@ -17247,6 +17247,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/kt23739.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nestedEnumEntryValue.kt")
|
||||
public void testNestedEnumEntryValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/nestedEnumEntryValue.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("parametersInArgumentValues.kt")
|
||||
public void testParametersInArgumentValues() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/parametersInArgumentValues.kt");
|
||||
|
||||
+11
@@ -31,10 +31,16 @@ class ModuleIndex(val module: IrModuleFragment) {
|
||||
*/
|
||||
val properties: Map<PropertyDescriptor, IrProperty>
|
||||
|
||||
/**
|
||||
* Contains all enum entries declared in [module]
|
||||
*/
|
||||
val enumEntries: Map<ClassDescriptor, IrEnumEntry>
|
||||
|
||||
init {
|
||||
classes = mutableMapOf()
|
||||
functions = mutableMapOf()
|
||||
properties = mutableMapOf()
|
||||
enumEntries = mutableMapOf()
|
||||
|
||||
module.acceptVoid(object : IrElementVisitorVoid {
|
||||
override fun visitElement(element: IrElement) {
|
||||
@@ -56,6 +62,11 @@ class ModuleIndex(val module: IrModuleFragment) {
|
||||
super.visitProperty(declaration)
|
||||
properties[declaration.descriptor] = declaration
|
||||
}
|
||||
|
||||
override fun visitEnumEntry(declaration: IrEnumEntry) {
|
||||
super.visitEnumEntry(declaration)
|
||||
enumEntries[declaration.descriptor] = declaration
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
+10
-4
@@ -16,10 +16,7 @@ import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.*
|
||||
import org.jetbrains.kotlin.ir.util.DeepCopyIrTreeWithSymbols
|
||||
import org.jetbrains.kotlin.ir.util.DeepCopySymbolRemapper
|
||||
import org.jetbrains.kotlin.ir.util.DeepCopyTypeRemapper
|
||||
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||
@@ -101,6 +98,9 @@ internal class ExpectToActualDefaultValueCopier(private val irModule: IrModuleFr
|
||||
private fun IrClass.findActualForExpected(): IrClass =
|
||||
moduleIndex.classes[descriptor.findActualForExpect()]!!
|
||||
|
||||
private fun IrEnumEntry.findActualForExpected(): IrEnumEntry =
|
||||
moduleIndex.enumEntries[descriptor.findActualForExpect()]!!
|
||||
|
||||
private inline fun <reified T : MemberDescriptor> T.findActualForExpect(): T {
|
||||
if (!this.isExpect) error(this)
|
||||
return (findCompatibleActualsForExpected(module).singleOrNull() ?: error(this)) as T
|
||||
@@ -156,6 +156,12 @@ internal class ExpectToActualDefaultValueCopier(private val irModule: IrModuleFr
|
||||
else
|
||||
super.getReferencedProperty(symbol)
|
||||
|
||||
override fun getReferencedEnumEntry(symbol: IrEnumEntrySymbol): IrEnumEntrySymbol =
|
||||
if (symbol.descriptor.isExpect)
|
||||
symbol.owner.findActualForExpected().symbol
|
||||
else
|
||||
super.getReferencedEnumEntry(symbol)
|
||||
|
||||
override fun getReferencedValue(symbol: IrValueSymbol) =
|
||||
remapExpectValue(symbol)?.symbol ?: super.getReferencedValue(symbol)
|
||||
}
|
||||
|
||||
Generated
+6
@@ -21909,6 +21909,12 @@ public class ExternalTestGenerated extends AbstractExternalNativeBlackBoxTest {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/kt23739.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedEnumEntryValue.kt")
|
||||
public void testNestedEnumEntryValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/multiplatform/defaultArguments/nestedEnumEntryValue.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("parametersInArgumentValues.kt")
|
||||
public void testParametersInArgumentValues() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user