IC mangling: Generate version requirements to properties as well

Generate the requirements at JVM only.
This commit is contained in:
Ilmir Usmanov
2020-11-16 19:46:04 +01:00
parent 0d79ed1077
commit 7a18ab9094
7 changed files with 55 additions and 51 deletions
@@ -61,7 +61,7 @@ class JvmSerializerExtension @JvmOverloads constructor(
override val metadataVersion = state.metadataVersion
private val jvmDefaultMode = state.jvmDefaultMode
private val approximator = state.typeApproximator
private val useOldManglingScheme = state.configuration.getBoolean(JVMConfigurationKeys.USE_OLD_INLINE_CLASSES_MANGLING_SCHEME)
private val useOldManglingScheme = state.useOldManglingSchemeForFunctionsWithInlineClassesInSignatures
override fun shouldUseTypeTable(): Boolean = useTypeTable
override fun shouldSerializeFunction(descriptor: FunctionDescriptor): Boolean {
@@ -217,6 +217,13 @@ class JvmSerializerExtension @JvmOverloads constructor(
) {
versionRequirementTable?.writeFunctionNameManglingForReturnTypeRequirement(proto::addVersionRequirement)
}
if ((requiresFunctionNameManglingForReturnType(descriptor) ||
requiresFunctionNameManglingForParameterTypes(descriptor)) &&
!DescriptorUtils.hasJvmNameAnnotation(descriptor) && !useOldManglingScheme
) {
versionRequirementTable?.writeNewFunctionNameManglingRequirement(proto::addVersionRequirement)
}
}
private fun MutableVersionRequirementTable.writeInlineParameterNullCheckRequirement(add: (Int) -> Unit) {
@@ -233,6 +240,12 @@ class JvmSerializerExtension @JvmOverloads constructor(
}
}
private fun MutableVersionRequirementTable.writeNewFunctionNameManglingRequirement(add: (Int) -> Unit) {
if (languageVersionSettings.languageVersion.major == 1 && languageVersionSettings.languageVersion.minor >= 4) {
add(writeVersionRequirement(1, 4, 30, ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION, this))
}
}
private fun FunctionDescriptor.needsInlineParameterNullCheckRequirement(): Boolean =
isInline && !isSuspend && !isParamAssertionsDisabled &&
!DescriptorVisibilities.isPrivate(visibility) &&
@@ -280,6 +293,9 @@ class JvmSerializerExtension @JvmOverloads constructor(
}
if (!DescriptorUtils.hasJvmNameAnnotation(descriptor) && requiresFunctionNameManglingForReturnType(descriptor)) {
if (!useOldManglingScheme) {
versionRequirementTable?.writeNewFunctionNameManglingRequirement(proto::addVersionRequirement)
}
versionRequirementTable?.writeFunctionNameManglingForReturnTypeRequirement(proto::addVersionRequirement)
}
}
@@ -401,6 +417,4 @@ class JvmSerializerExtension @JvmOverloads constructor(
override fun releaseCoroutines(): Boolean {
return languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines)
}
override fun useOldInlineClassesManglingScheme(): Boolean = useOldManglingScheme
}
@@ -195,6 +195,9 @@ class GenerationState private constructor(
val languageVersionSettings = configuration.languageVersionSettings
val useOldManglingSchemeForFunctionsWithInlineClassesInSignatures =
configuration.getBoolean(JVMConfigurationKeys.USE_OLD_INLINE_CLASSES_MANGLING_SCHEME)
val target = configuration.get(JVMConfigurationKeys.JVM_TARGET) ?: JvmTarget.DEFAULT
val runtimeStringConcat =
if (target.bytecodeVersion >= JvmTarget.JVM_9.bytecodeVersion)
@@ -214,7 +217,7 @@ class GenerationState private constructor(
classBuilderMode,
this.moduleName,
languageVersionSettings,
configuration.getBoolean(JVMConfigurationKeys.USE_OLD_INLINE_CLASSES_MANGLING_SCHEME),
useOldManglingSchemeForFunctionsWithInlineClassesInSignatures,
IncompatibleClassTrackerImpl(extraJvmDiagnosticsTrace),
target,
isIrBackend