diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMangleComputer.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMangleComputer.kt index 49aed95b48c..a8110852c54 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMangleComputer.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMangleComputer.kt @@ -190,6 +190,10 @@ open class FirMangleComputer( mangleType(tBuilder, type.lowerBound, declarationSiteSession) } + is ConeDynamicType -> { + tBuilder.appendSignature(MangleConstant.DYNAMIC_MARK) + } + is ConeFlexibleType -> { with(declarationSiteSession.typeContext) { // Need to reproduce type approximation done for flexible types in TypeTranslator. diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt index 63c3ddaebd5..a650c533500 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.ir.descriptors +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptorImpl @@ -104,6 +105,9 @@ abstract class IrBasedDeclarationDescriptor(val owner: T) : D } } + @OptIn(ObsoleteDescriptorBasedAPI::class) + protected fun IrType.toIrBasedKotlinType(): KotlinType = toIrBasedKotlinType(owner.module.builtIns) + override fun getContainingDeclaration(): DeclarationDescriptor = getContainingDeclaration(owner) @@ -1161,9 +1165,9 @@ private fun getContainingDeclaration(declaration: IrDeclaration): DeclarationDes } } -fun IrType.toIrBasedKotlinType(): KotlinType = when (this) { +fun IrType.toIrBasedKotlinType(builtins: KotlinBuiltIns? = null): KotlinType = when (this) { is IrSimpleType -> - makeKotlinType(classifier, arguments, isMarkedNullable()).let { + makeKotlinType(classifier, arguments, isMarkedNullable(), builtins).let { if (classifier is IrTypeParameterSymbol && nullability == SimpleTypeNullability.DEFINITELY_NOT_NULL) { // avoidCheckingActualTypeNullability = true is necessary because in recursive cases `makesSenseToBeDefinitelyNotNull` triggers // supertype computation for a type parameter and for which bounds we need to call `toIrBasedKotlinType` again @@ -1172,6 +1176,7 @@ fun IrType.toIrBasedKotlinType(): KotlinType = when (this) { it } } + is IrDynamicType -> kotlinType ?: builtins?.let(::createDynamicType) ?: error("Couldn't instantiate DynamicType") is IrErrorType -> kotlinType ?: error("Can't find KotlinType in IrErrorType: " + (this as IrType).render()) else -> throw AssertionError("Unexpected type: $this = ${this.render()}") @@ -1180,7 +1185,8 @@ fun IrType.toIrBasedKotlinType(): KotlinType = when (this) { private fun makeKotlinType( classifier: IrClassifierSymbol, arguments: List, - hasQuestionMark: Boolean + hasQuestionMark: Boolean, + builtins: KotlinBuiltIns?, ): SimpleType = when (classifier) { is IrTypeParameterSymbol -> @@ -1189,7 +1195,7 @@ private fun makeKotlinType( val classDescriptor = classifier.toIrBasedDescriptorIfPossible() val kotlinTypeArguments = arguments.memoryOptimizedMapIndexed { index, it -> when (it) { - is IrTypeProjection -> TypeProjectionImpl(it.variance, it.type.toIrBasedKotlinType()) + is IrTypeProjection -> TypeProjectionImpl(it.variance, it.type.toIrBasedKotlinType(builtins)) is IrStarProjection -> StarProjectionImpl(classDescriptor.typeConstructor.parameters[index]) } } diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicAndMembersOfAny.kt b/compiler/testData/ir/irText/js/dynamic/dynamicAndMembersOfAny.kt index f22968ec0da..65f54892e05 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicAndMembersOfAny.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicAndMembersOfAny.kt @@ -1,10 +1,6 @@ // TARGET_BACKEND: JS_IR // FIR_IDENTICAL // WITH_STDLIB - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun test1(d: dynamic) = d.toString() fun test2(d: dynamic) = d.hashCode() diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicArrayAccess.kt b/compiler/testData/ir/irText/js/dynamic/dynamicArrayAccess.kt index 6ed1a665b8b..9c5420061eb 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicArrayAccess.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicArrayAccess.kt @@ -1,9 +1,5 @@ // TARGET_BACKEND: JS_IR // FIR_IDENTICAL - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun testArrayAccess1(d: dynamic) = d["KEY"] fun testArrayAccess2(d: dynamic) = d()["KEY"] diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicArrayAssignment.kt b/compiler/testData/ir/irText/js/dynamic/dynamicArrayAssignment.kt index 4c926b484dc..3cd296d2e9a 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicArrayAssignment.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicArrayAssignment.kt @@ -1,8 +1,4 @@ // TARGET_BACKEND: JS_IR - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun testArrayAssignment(d: dynamic) { d["KEY"] = 1 } diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicArrayAugmentedAssignment.kt b/compiler/testData/ir/irText/js/dynamic/dynamicArrayAugmentedAssignment.kt index 48da26b4c0b..48bad667e3e 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicArrayAugmentedAssignment.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicArrayAugmentedAssignment.kt @@ -1,9 +1,5 @@ // TARGET_BACKEND: JS_IR // FIR_IDENTICAL - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun testArrayAugmentedAssignment(d: dynamic) { d["KEY"] += "+=" d["KEY"] -= "-=" diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicBinaryEqualityOperator.kt b/compiler/testData/ir/irText/js/dynamic/dynamicBinaryEqualityOperator.kt index 06e201a4e6c..035f6a2b949 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicBinaryEqualityOperator.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicBinaryEqualityOperator.kt @@ -1,9 +1,5 @@ // TARGET_BACKEND: JS_IR // FIR_IDENTICAL - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun testEqeq(d: dynamic) = d == 3 fun testExclEq(d: dynamic) = d != 3 fun testEqeqeq(d: dynamic) = d === 3 diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicBinaryLogicalOperator.kt b/compiler/testData/ir/irText/js/dynamic/dynamicBinaryLogicalOperator.kt index 0129cca4827..2ef52877cd0 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicBinaryLogicalOperator.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicBinaryLogicalOperator.kt @@ -1,8 +1,4 @@ // TARGET_BACKEND: JS_IR // FIR_IDENTICAL - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun testAndAnd(d: dynamic) = d && d fun testOrOr(d: dynamic) = d || d diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicBinaryOperator.kt b/compiler/testData/ir/irText/js/dynamic/dynamicBinaryOperator.kt index 2b82271e39a..a60583c8e8c 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicBinaryOperator.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicBinaryOperator.kt @@ -1,9 +1,5 @@ // TARGET_BACKEND: JS_IR // FIR_IDENTICAL - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun testBinaryPlus(d: dynamic) = d + 1 fun testBinaryMinus(d: dynamic) = d - 1 fun testMul(d: dynamic) = d * 2 diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicBinaryRelationalOperator.kt b/compiler/testData/ir/irText/js/dynamic/dynamicBinaryRelationalOperator.kt index c40f06c5b95..74228727174 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicBinaryRelationalOperator.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicBinaryRelationalOperator.kt @@ -1,9 +1,5 @@ // TARGET_BACKEND: JS_IR // FIR_IDENTICAL - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun testLess(d: dynamic) = d < 2 fun testLessOrEqual(d: dynamic) = d <= 2 fun testGreater(d: dynamic) = d > 2 diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicCall.kt b/compiler/testData/ir/irText/js/dynamic/dynamicCall.kt index 4792c4109ce..5313d17e804 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicCall.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicCall.kt @@ -1,9 +1,5 @@ // TARGET_BACKEND: JS_IR // FIR_IDENTICAL - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun test1(d: dynamic) = d.member(1, 2, 3) fun test2(d: dynamic) = d?.member(1, 2, 3) diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicElvisOperator.kt b/compiler/testData/ir/irText/js/dynamic/dynamicElvisOperator.kt index b8d7ee2c84d..68b9b2964c0 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicElvisOperator.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicElvisOperator.kt @@ -1,6 +1,2 @@ // TARGET_BACKEND: JS_IR - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun test(d: dynamic) = d ?: "other" diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicExclExclOperator.kt b/compiler/testData/ir/irText/js/dynamic/dynamicExclExclOperator.kt index 2fc130c8962..643c44bfde5 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicExclExclOperator.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicExclExclOperator.kt @@ -1,8 +1,4 @@ // TARGET_BACKEND: JS_IR // IGNORE_BACKEND_K1: JS_IR // IGNORE_BACKEND_K1: JS_IR_ES6 - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun test(d: dynamic) = d!! diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicInfixCall.kt b/compiler/testData/ir/irText/js/dynamic/dynamicInfixCall.kt index 9473706d424..e092a8c6b55 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicInfixCall.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicInfixCall.kt @@ -1,9 +1,5 @@ // TARGET_BACKEND: JS_IR // FIR_IDENTICAL - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun test1(d: dynamic) = d foo 123 fun test2(d: dynamic) = d invoke 123 diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicMemberAccess.kt b/compiler/testData/ir/irText/js/dynamic/dynamicMemberAccess.kt index 288e70c6f1b..35bd549b55b 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicMemberAccess.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicMemberAccess.kt @@ -1,9 +1,5 @@ // TARGET_BACKEND: JS_IR // FIR_IDENTICAL - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun test1(d: dynamic) = d.member fun test2(d: dynamic) = d?.member diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicMemberAssignment.kt b/compiler/testData/ir/irText/js/dynamic/dynamicMemberAssignment.kt index ef182722bc8..3c15ab1526f 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicMemberAssignment.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicMemberAssignment.kt @@ -1,8 +1,4 @@ // TARGET_BACKEND: JS_IR - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun testMemberAssignment(d: dynamic) { d.m = 1 } diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicMemberAugmentedAssignment.kt b/compiler/testData/ir/irText/js/dynamic/dynamicMemberAugmentedAssignment.kt index 359cf272be3..7a468d6b47b 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicMemberAugmentedAssignment.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicMemberAugmentedAssignment.kt @@ -1,8 +1,4 @@ // TARGET_BACKEND: JS_IR - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun testAugmentedMemberAssignment(d: dynamic) { d.m += "+=" d.m -= "-=" diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicUnaryOperator.kt b/compiler/testData/ir/irText/js/dynamic/dynamicUnaryOperator.kt index 314cd44b93e..2cf433812e8 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicUnaryOperator.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicUnaryOperator.kt @@ -1,9 +1,5 @@ // TARGET_BACKEND: JS_IR // FIR_IDENTICAL - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun testUnaryMinus(d: dynamic) = -d fun testUnaryPlus(d: dynamic) = +d fun testExcl(d: dynamic) = !d diff --git a/compiler/testData/ir/irText/js/dynamic/dynamicWithSmartCast.kt b/compiler/testData/ir/irText/js/dynamic/dynamicWithSmartCast.kt index 2bb60e34edc..b005063ee16 100644 --- a/compiler/testData/ir/irText/js/dynamic/dynamicWithSmartCast.kt +++ b/compiler/testData/ir/irText/js/dynamic/dynamicWithSmartCast.kt @@ -1,9 +1,5 @@ // TARGET_BACKEND: JS_IR // WITH_STDLIB - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun test1(d: dynamic) = if (d is String) d.length else -1 fun test2(d: dynamic) = if (d is Array<*>) d.size else -1 diff --git a/compiler/testData/ir/irText/js/dynamic/implicitCastFromDynamic.kt b/compiler/testData/ir/irText/js/dynamic/implicitCastFromDynamic.kt index 14d15ab4c8e..15a20e58cc0 100644 --- a/compiler/testData/ir/irText/js/dynamic/implicitCastFromDynamic.kt +++ b/compiler/testData/ir/irText/js/dynamic/implicitCastFromDynamic.kt @@ -2,7 +2,7 @@ // FIR_IDENTICAL // MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 +// ^ KT-57818 val d: dynamic = 1 diff --git a/compiler/testData/ir/irText/js/dynamic/implicitCastToDynamic.kt b/compiler/testData/ir/irText/js/dynamic/implicitCastToDynamic.kt index 09671137d4e..809d65df94f 100644 --- a/compiler/testData/ir/irText/js/dynamic/implicitCastToDynamic.kt +++ b/compiler/testData/ir/irText/js/dynamic/implicitCastToDynamic.kt @@ -1,7 +1,7 @@ // TARGET_BACKEND: JS_IR // MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 +// ^ KT-57818 val d1: dynamic = 1 diff --git a/compiler/testData/ir/irText/js/dynamic/invokeOperator.kt b/compiler/testData/ir/irText/js/dynamic/invokeOperator.kt index 2393ee2ade8..13d28d8540e 100644 --- a/compiler/testData/ir/irText/js/dynamic/invokeOperator.kt +++ b/compiler/testData/ir/irText/js/dynamic/invokeOperator.kt @@ -1,9 +1,5 @@ // TARGET_BACKEND: JS_IR // FIR_IDENTICAL - -// MUTE_SIGNATURE_COMPARISON_K2: ANY -// ^ KT-57566 - fun invoke() {} fun test1(a: dynamic) = a(1)