[commonizer] Don't commonize "tailrec" and "external" modifiers
expect external and tailrec were prohibited in previous commit. ^KT-58536
This commit is contained in:
committed by
Space Team
parent
439cc88525
commit
c8023eac13
@@ -14,7 +14,6 @@ interface CirClass : CirClassifier, CirContainingClass, AnyClass {
|
||||
val isCompanion: Boolean
|
||||
val isValue: Boolean
|
||||
val isInner: Boolean
|
||||
val isExternal: Boolean
|
||||
val hasEnumEntries: Boolean
|
||||
val supertypes: List<CirType>
|
||||
|
||||
@@ -33,7 +32,6 @@ interface CirClass : CirClassifier, CirContainingClass, AnyClass {
|
||||
isData: Boolean,
|
||||
isValue: Boolean,
|
||||
isInner: Boolean,
|
||||
isExternal: Boolean,
|
||||
hasEnumEntries: Boolean
|
||||
): CirClass = CirClassImpl(
|
||||
annotations = annotations,
|
||||
@@ -48,7 +46,6 @@ interface CirClass : CirClassifier, CirContainingClass, AnyClass {
|
||||
isData = isData,
|
||||
isValue = isValue,
|
||||
isInner = isInner,
|
||||
isExternal = isExternal,
|
||||
hasEnumEntries = hasEnumEntries
|
||||
)
|
||||
}
|
||||
@@ -67,6 +64,5 @@ data class CirClassImpl(
|
||||
override val isData: Boolean,
|
||||
override val isValue: Boolean,
|
||||
override val isInner: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override val hasEnumEntries: Boolean
|
||||
) : CirClass
|
||||
|
||||
@@ -11,26 +11,20 @@ interface CirFunctionModifiers {
|
||||
val isOperator: Boolean
|
||||
val isInfix: Boolean
|
||||
val isInline: Boolean
|
||||
val isTailrec: Boolean
|
||||
val isSuspend: Boolean
|
||||
val isExternal: Boolean
|
||||
|
||||
companion object {
|
||||
fun createInterned(
|
||||
isOperator: Boolean,
|
||||
isInfix: Boolean,
|
||||
isInline: Boolean,
|
||||
isTailrec: Boolean,
|
||||
isSuspend: Boolean,
|
||||
isExternal: Boolean
|
||||
): CirFunctionModifiers = interner.intern(
|
||||
CirFunctionModifiersInternedImpl(
|
||||
isOperator = isOperator,
|
||||
isInfix = isInfix,
|
||||
isInline = isInline,
|
||||
isTailrec = isTailrec,
|
||||
isSuspend = isSuspend,
|
||||
isExternal = isExternal
|
||||
)
|
||||
)
|
||||
|
||||
@@ -42,7 +36,5 @@ private data class CirFunctionModifiersInternedImpl(
|
||||
override val isOperator: Boolean,
|
||||
override val isInfix: Boolean,
|
||||
override val isInline: Boolean,
|
||||
override val isTailrec: Boolean,
|
||||
override val isSuspend: Boolean,
|
||||
override val isExternal: Boolean
|
||||
) : CirFunctionModifiers
|
||||
|
||||
@@ -16,7 +16,6 @@ data class CirProperty(
|
||||
override val visibility: Visibility,
|
||||
override val modality: Modality,
|
||||
override val containingClass: CirContainingClass?,
|
||||
val isExternal: Boolean,
|
||||
override val extensionReceiver: CirExtensionReceiver?,
|
||||
override val returnType: CirType,
|
||||
override val kind: CallableMemberDescriptor.Kind,
|
||||
|
||||
@@ -7,6 +7,5 @@ package org.jetbrains.kotlin.commonizer.cir
|
||||
|
||||
interface CirPropertyAccessor : CirHasAnnotations {
|
||||
val isDefault: Boolean
|
||||
val isExternal: Boolean
|
||||
val isInline: Boolean
|
||||
}
|
||||
|
||||
@@ -15,13 +15,11 @@ interface CirPropertyGetter : CirPropertyAccessor {
|
||||
fun createInterned(
|
||||
annotations: List<CirAnnotation>,
|
||||
isDefault: Boolean,
|
||||
isExternal: Boolean,
|
||||
isInline: Boolean
|
||||
): CirPropertyGetter = interner.intern(
|
||||
CirPropertyGetterInternedImpl(
|
||||
annotations = annotations,
|
||||
isDefault = isDefault,
|
||||
isExternal = isExternal,
|
||||
isInline = isInline
|
||||
)
|
||||
)
|
||||
@@ -32,7 +30,6 @@ interface CirPropertyGetter : CirPropertyAccessor {
|
||||
DEFAULT_NO_ANNOTATIONS = createInterned(
|
||||
annotations = emptyList(),
|
||||
isDefault = true,
|
||||
isExternal = false,
|
||||
isInline = false
|
||||
)
|
||||
}
|
||||
@@ -42,6 +39,5 @@ interface CirPropertyGetter : CirPropertyAccessor {
|
||||
private data class CirPropertyGetterInternedImpl(
|
||||
override val annotations: List<CirAnnotation>,
|
||||
override val isDefault: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override val isInline: Boolean
|
||||
) : CirPropertyGetter
|
||||
|
||||
@@ -18,7 +18,6 @@ interface CirPropertySetter : CirDeclaration, CirPropertyAccessor, CirHasVisibil
|
||||
parameterAnnotations: List<CirAnnotation>,
|
||||
visibility: Visibility,
|
||||
isDefault: Boolean,
|
||||
isExternal: Boolean,
|
||||
isInline: Boolean
|
||||
): CirPropertySetter = interner.intern(
|
||||
CirPropertySetterInternedImpl(
|
||||
@@ -26,7 +25,6 @@ interface CirPropertySetter : CirDeclaration, CirPropertyAccessor, CirHasVisibil
|
||||
parameterAnnotations = parameterAnnotations,
|
||||
visibility = visibility,
|
||||
isDefault = isDefault,
|
||||
isExternal = isExternal,
|
||||
isInline = isInline
|
||||
)
|
||||
)
|
||||
@@ -37,7 +35,6 @@ interface CirPropertySetter : CirDeclaration, CirPropertyAccessor, CirHasVisibil
|
||||
parameterAnnotations = emptyList(),
|
||||
visibility = visibility,
|
||||
isDefault = visibility == Visibilities.Public,
|
||||
isExternal = false,
|
||||
isInline = false
|
||||
)
|
||||
|
||||
@@ -50,6 +47,5 @@ private data class CirPropertySetterInternedImpl(
|
||||
override val parameterAnnotations: List<CirAnnotation>,
|
||||
override val visibility: Visibility,
|
||||
override val isDefault: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override val isInline: Boolean
|
||||
) : CirPropertySetter
|
||||
|
||||
@@ -19,7 +19,6 @@ object CirClassRecursionMarker : CirClass, CirRecursionMarker {
|
||||
override val isData get() = unsupported()
|
||||
override val isValue get() = unsupported()
|
||||
override val isInner get() = unsupported()
|
||||
override val isExternal get() = unsupported()
|
||||
override val hasEnumEntries: Boolean get() = unsupported()
|
||||
override var supertypes: List<CirType>
|
||||
get() = unsupported()
|
||||
|
||||
@@ -38,7 +38,6 @@ class ClassCommonizer internal constructor(
|
||||
isData = false,
|
||||
isValue = isValue,
|
||||
isInner = isInner,
|
||||
isExternal = false,
|
||||
hasEnumEntries = hasEnumEntries
|
||||
)
|
||||
}
|
||||
|
||||
-8
@@ -12,26 +12,20 @@ class FunctionModifiersCommonizer : AbstractStandardCommonizer<CirFunctionModifi
|
||||
var isOperator: Boolean,
|
||||
var isInfix: Boolean,
|
||||
var isInline: Boolean,
|
||||
var isTailrec: Boolean,
|
||||
var isSuspend: Boolean,
|
||||
var isExternal: Boolean
|
||||
) {
|
||||
constructor(immutable: CirFunctionModifiers) : this(
|
||||
isOperator = immutable.isOperator,
|
||||
isInfix = immutable.isInfix,
|
||||
isInline = immutable.isInline,
|
||||
isTailrec = immutable.isTailrec,
|
||||
isSuspend = immutable.isSuspend,
|
||||
isExternal = immutable.isExternal
|
||||
)
|
||||
|
||||
fun toImmutableModifiers() = CirFunctionModifiers.createInterned(
|
||||
isOperator = isOperator,
|
||||
isInfix = isInfix,
|
||||
isInline = isInline,
|
||||
isTailrec = isTailrec,
|
||||
isSuspend = isSuspend,
|
||||
isExternal = isExternal
|
||||
)
|
||||
}
|
||||
|
||||
@@ -50,8 +44,6 @@ class FunctionModifiersCommonizer : AbstractStandardCommonizer<CirFunctionModifi
|
||||
modifiers.isOperator = modifiers.isOperator && next.isOperator
|
||||
modifiers.isInfix = modifiers.isInfix && next.isInfix
|
||||
modifiers.isInline = modifiers.isInline && next.isInline
|
||||
modifiers.isTailrec = modifiers.isTailrec && next.isTailrec
|
||||
modifiers.isExternal = modifiers.isExternal && next.isExternal
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ class PropertyCommonizer(
|
||||
functionOrPropertyBaseCommonizer: FunctionOrPropertyBaseCommonizer
|
||||
) : AbstractStandardCommonizer<CirProperty, CirProperty?>() {
|
||||
private val setter = PropertySetterCommonizer.asNullableCommonizer()
|
||||
private var isExternal = true
|
||||
private lateinit var constCommonizationState: ConstCommonizationState
|
||||
private val functionOrPropertyBaseCommonizer = functionOrPropertyBaseCommonizer.asCommonizer()
|
||||
|
||||
@@ -36,7 +35,6 @@ class PropertyCommonizer(
|
||||
visibility = functionOrPropertyBase.visibility,
|
||||
modality = functionOrPropertyBase.modality,
|
||||
containingClass = null, // does not matter
|
||||
isExternal = isExternal,
|
||||
extensionReceiver = functionOrPropertyBase.extensionReceiver,
|
||||
returnType = functionOrPropertyBase.returnType,
|
||||
kind = functionOrPropertyBase.kind,
|
||||
@@ -92,10 +90,6 @@ class PropertyCommonizer(
|
||||
val result = functionOrPropertyBaseCommonizer.commonizeWith(next)
|
||||
&& setter.commonizeWith(next.setter)
|
||||
|
||||
if (result) {
|
||||
isExternal = isExternal && next.isExternal
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
@@ -102,7 +102,6 @@ object CirDeserializers {
|
||||
visibility = visibility(source.flags),
|
||||
modality = modality(source.flags),
|
||||
containingClass = containingClass,
|
||||
isExternal = Flag.Property.IS_EXTERNAL(source.flags),
|
||||
extensionReceiver = source.receiverParameterType?.let { extensionReceiver(it, typeResolver) },
|
||||
returnType = type(source.returnType, typeResolver),
|
||||
kind = callableKind(source.flags),
|
||||
@@ -133,7 +132,6 @@ object CirDeserializers {
|
||||
return CirPropertyGetter.createInterned(
|
||||
annotations = annotations,
|
||||
isDefault = isDefault,
|
||||
isExternal = Flag.PropertyAccessor.IS_EXTERNAL(getterFlags),
|
||||
isInline = Flag.PropertyAccessor.IS_INLINE(getterFlags)
|
||||
)
|
||||
}
|
||||
@@ -151,7 +149,6 @@ object CirDeserializers {
|
||||
}.orEmpty(),
|
||||
visibility = visibility(setterFlags),
|
||||
isDefault = !Flag.PropertyAccessor.IS_NOT_DEFAULT(setterFlags),
|
||||
isExternal = Flag.PropertyAccessor.IS_EXTERNAL(setterFlags),
|
||||
isInline = Flag.PropertyAccessor.IS_INLINE(setterFlags)
|
||||
)
|
||||
}
|
||||
@@ -186,9 +183,7 @@ object CirDeserializers {
|
||||
isOperator = Flag.Function.IS_OPERATOR(source.flags),
|
||||
isInfix = Flag.Function.IS_INFIX(source.flags),
|
||||
isInline = Flag.Function.IS_INLINE(source.flags),
|
||||
isTailrec = Flag.Function.IS_TAILREC(source.flags),
|
||||
isSuspend = Flag.Function.IS_SUSPEND(source.flags),
|
||||
isExternal = Flag.Function.IS_EXTERNAL(source.flags)
|
||||
)
|
||||
|
||||
private fun valueParameter(source: KmValueParameter, typeResolver: CirTypeResolver): CirValueParameter =
|
||||
@@ -265,7 +260,6 @@ object CirDeserializers {
|
||||
isData = Flag.Class.IS_DATA(source.flags),
|
||||
isValue = Flag.Class.IS_VALUE(source.flags),
|
||||
isInner = Flag.Class.IS_INNER(source.flags),
|
||||
isExternal = Flag.Class.IS_EXTERNAL(source.flags),
|
||||
hasEnumEntries = Flag.Class.HAS_ENUM_ENTRIES(source.flags)
|
||||
)
|
||||
|
||||
@@ -295,7 +289,6 @@ object CirDeserializers {
|
||||
isData = false,
|
||||
isValue = false,
|
||||
isInner = false,
|
||||
isExternal = false,
|
||||
hasEnumEntries = hasEnumEntries
|
||||
)
|
||||
|
||||
|
||||
@@ -47,7 +47,6 @@ internal fun CirPropertyAccessor.propertyAccessorFlags(
|
||||
visibilityHolder.visibilityFlag,
|
||||
modalityHolder.modalityFlag,
|
||||
Flag.PropertyAccessor.IS_NOT_DEFAULT.takeIf { !isDefault },
|
||||
Flag.PropertyAccessor.IS_EXTERNAL.takeIf { isExternal },
|
||||
Flag.PropertyAccessor.IS_INLINE.takeIf { isInline }
|
||||
)
|
||||
}
|
||||
@@ -88,7 +87,6 @@ internal fun CirClass.classFlags(isExpect: Boolean): Flags =
|
||||
Flag.Class.IS_COMPANION_OBJECT.takeIf { isCompanion },
|
||||
Flag.Class.IS_INNER.takeIf { isInner },
|
||||
Flag.Class.IS_DATA.takeIf { isData },
|
||||
Flag.Class.IS_EXTERNAL.takeIf { isExternal },
|
||||
Flag.Class.IS_EXPECT.takeIf { isExpect },
|
||||
Flag.Class.IS_VALUE.takeIf { isValue },
|
||||
Flag.Class.HAS_ENUM_ENTRIES.takeIf { hasEnumEntries }
|
||||
@@ -163,9 +161,7 @@ private inline val CirFunctionModifiers.modifiersFlags: Flags
|
||||
Flag.Function.IS_OPERATOR.takeIf { isOperator },
|
||||
Flag.Function.IS_INFIX.takeIf { isInfix },
|
||||
Flag.Function.IS_INLINE.takeIf { isInline },
|
||||
Flag.Function.IS_TAILREC.takeIf { isTailrec },
|
||||
Flag.Function.IS_SUSPEND.takeIf { isSuspend },
|
||||
Flag.Function.IS_EXTERNAL.takeIf { isExternal }
|
||||
)
|
||||
|
||||
private inline val CirProperty.modifiersFlags: Flags
|
||||
@@ -174,7 +170,6 @@ private inline val CirProperty.modifiersFlags: Flags
|
||||
Flag.Property.IS_CONST.takeIf { isConst },
|
||||
Flag.Property.HAS_CONSTANT.takeIf { compileTimeInitializer.takeIf { it !is CirConstantValue.NullValue } != null },
|
||||
Flag.Property.IS_LATEINIT.takeIf { isLateInit },
|
||||
Flag.Property.IS_EXTERNAL.takeIf { isExternal }
|
||||
)
|
||||
|
||||
private inline val CirType.nullableFlag: Flag?
|
||||
|
||||
+1
-1
@@ -127,7 +127,7 @@ internal class InlineTypeAliasCirNodeTransformer(
|
||||
private fun CirTypeAlias.toArtificialCirClass(targetIndex: Int): CirClass = CirClass.create(
|
||||
annotations = emptyList(), name = name, typeParameters = typeParameters, supertypes = resolveSupertypes(targetIndex),
|
||||
visibility = this.visibility, modality = Modality.FINAL, kind = ClassKind.CLASS,
|
||||
companion = null, isCompanion = false, isData = false, isValue = false, isInner = false, isExternal = false, hasEnumEntries = false
|
||||
companion = null, isCompanion = false, isData = false, isValue = false, isInner = false, hasEnumEntries = false
|
||||
)
|
||||
|
||||
private fun CirTypeAlias.resolveSupertypes(targetIndex: Int): List<CirType> {
|
||||
|
||||
+2
@@ -94,3 +94,5 @@ expect class LL1(value: String) {
|
||||
expect class LL2(value: String) {
|
||||
val value: String
|
||||
}
|
||||
|
||||
expect class ExternalClass()
|
||||
native/commonizer/testData/classifierCommonization/classKindAndModifiers/original/js/package_root.kt
Vendored
+2
@@ -145,3 +145,5 @@ class KK2(private val wrapped: JJ) : JJ by wrapped
|
||||
|
||||
data class LL1(val value: String)
|
||||
data class LL2(val value: String)
|
||||
|
||||
external class ExternalClass
|
||||
+2
@@ -145,3 +145,5 @@ class KK2(wrapped: JJ) : JJ by wrapped
|
||||
|
||||
data class LL1(val value: String)
|
||||
class LL2(val value: String)
|
||||
|
||||
external class ExternalClass
|
||||
Vendored
+2
-2
@@ -8,10 +8,10 @@ expect fun Qux.set(index: Int, value: String)
|
||||
expect infix fun Qux.infixFunction1(another: Qux)
|
||||
expect fun Qux.infixFunction2(another: Qux)
|
||||
|
||||
expect tailrec fun tailrecFunction1()
|
||||
expect fun tailrecFunction1()
|
||||
expect fun tailrecFunction2()
|
||||
|
||||
expect external fun externalFunction1()
|
||||
expect fun externalFunction1()
|
||||
expect fun externalFunction2()
|
||||
|
||||
expect inline fun inlineFunction1() {}
|
||||
|
||||
Vendored
+3
-1
@@ -13,5 +13,7 @@ expect var inlineProperty6: Int
|
||||
expect var inlineProperty7: Int
|
||||
expect var inlineProperty8: Int
|
||||
|
||||
expect external val externalProperty1: Int
|
||||
expect val externalProperty1: Int
|
||||
expect val externalProperty2: Int
|
||||
|
||||
expect var externalSetGet: Int
|
||||
+4
@@ -28,3 +28,7 @@ inline var inlineProperty8
|
||||
|
||||
external val externalProperty1: Int
|
||||
external val externalProperty2: Int
|
||||
|
||||
var externalSetGet: Int
|
||||
external get
|
||||
external set
|
||||
+4
@@ -28,3 +28,7 @@ var inlineProperty8
|
||||
|
||||
external val externalProperty1: Int
|
||||
val externalProperty2: Int = 1
|
||||
|
||||
var externalSetGet: Int
|
||||
external get
|
||||
external set
|
||||
-52
@@ -112,54 +112,6 @@ class FunctionModifiersCommonizerTest : AbstractCommonizerTest<CirFunctionModifi
|
||||
mockFunctionModifiers()
|
||||
)
|
||||
|
||||
@Test
|
||||
fun allTailrec() = doTestSuccess(
|
||||
expected = mockFunctionModifiers(isTailrec = true),
|
||||
mockFunctionModifiers(isTailrec = true),
|
||||
mockFunctionModifiers(isTailrec = true),
|
||||
mockFunctionModifiers(isTailrec = true)
|
||||
)
|
||||
|
||||
@Test
|
||||
fun notTailrecAndTailrec() = doTestSuccess(
|
||||
expected = mockFunctionModifiers(),
|
||||
mockFunctionModifiers(),
|
||||
mockFunctionModifiers(isTailrec = true),
|
||||
mockFunctionModifiers(isTailrec = true)
|
||||
)
|
||||
|
||||
@Test
|
||||
fun tailrecAndNotTailrec() = doTestSuccess(
|
||||
expected = mockFunctionModifiers(),
|
||||
mockFunctionModifiers(isTailrec = true),
|
||||
mockFunctionModifiers(isTailrec = true),
|
||||
mockFunctionModifiers()
|
||||
)
|
||||
|
||||
@Test
|
||||
fun allExternal() = doTestSuccess(
|
||||
expected = mockFunctionModifiers(isExternal = true),
|
||||
mockFunctionModifiers(isExternal = true),
|
||||
mockFunctionModifiers(isExternal = true),
|
||||
mockFunctionModifiers(isExternal = true)
|
||||
)
|
||||
|
||||
@Test
|
||||
fun notExternalAndExternal() = doTestSuccess(
|
||||
expected = mockFunctionModifiers(),
|
||||
mockFunctionModifiers(),
|
||||
mockFunctionModifiers(isExternal = true),
|
||||
mockFunctionModifiers(isExternal = true)
|
||||
)
|
||||
|
||||
@Test
|
||||
fun externalAndNotExternal() = doTestSuccess(
|
||||
expected = mockFunctionModifiers(),
|
||||
mockFunctionModifiers(isExternal = true),
|
||||
mockFunctionModifiers(isExternal = true),
|
||||
mockFunctionModifiers()
|
||||
)
|
||||
|
||||
override fun createCommonizer() = FunctionModifiersCommonizer()
|
||||
}
|
||||
|
||||
@@ -167,14 +119,10 @@ private fun mockFunctionModifiers(
|
||||
isOperator: Boolean = false,
|
||||
isInfix: Boolean = false,
|
||||
isInline: Boolean = false,
|
||||
isTailrec: Boolean = false,
|
||||
isSuspend: Boolean = false,
|
||||
isExternal: Boolean = false
|
||||
) = CirFunctionModifiers.createInterned(
|
||||
isOperator = isOperator,
|
||||
isInfix = isInfix,
|
||||
isInline = isInline,
|
||||
isTailrec = isTailrec,
|
||||
isSuspend = isSuspend,
|
||||
isExternal = isExternal
|
||||
)
|
||||
|
||||
-1
@@ -22,7 +22,6 @@ class CirTreeClassDeserializerTest : AbstractCirTreeDeserializerTest() {
|
||||
assertNull(clazz.companion, "Expected class *not* having a companion")
|
||||
assertFalse(clazz.isInner, "Expected class *not* being inner")
|
||||
assertFalse(clazz.isCompanion, "Expected class *not* being companion")
|
||||
assertFalse(clazz.isExternal, "Expected class *not* being external")
|
||||
assertFalse(clazz.isValue, "Expected class *not* being value")
|
||||
assertFalse(clazz.isData, "Expected class *not* being data class")
|
||||
assertTrue(clazz.supertypes.isEmpty(), "Expected class not having any explicit supertypes")
|
||||
|
||||
@@ -75,7 +75,6 @@ internal val MOCK_CLASSIFIERS = CirKnownClassifiers(
|
||||
isData = false,
|
||||
isValue = false,
|
||||
isInner = false,
|
||||
isExternal = false,
|
||||
hasEnumEntries = false
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user