JVM IR: support value classes only when feature is enabled

Remove NeedsToVisit because it doesn't really help with performance, and
it significantly increases code complexity.
This commit is contained in:
Alexander Udalov
2023-08-24 16:45:16 +02:00
committed by Space Team
parent 2dee47a8c1
commit 12bbdebed2
13 changed files with 41 additions and 262 deletions
@@ -176,6 +176,8 @@ fun unboxedTypeOfInlineClass(boxedType: Type, state: GenerationState): Type? {
}
fun getMultiFieldValueClassUnboxInfo(boxedType: Type, state: GenerationState): MultiFieldValueClassUnboxInfo? {
if (!state.config.supportMultiFieldValueClasses) return null
val descriptor =
state.jvmBackendClassResolver.resolveToClassDescriptors(boxedType).singleOrNull()?.takeIf { it.isMultiFieldValueClass() }
?: return null
@@ -297,7 +297,7 @@ private fun AbstractInsnNode.isInlineClassUnboxing(state: GenerationState) =
}
private fun AbstractInsnNode.isMultiFieldValueClassUnboxing(state: GenerationState) =
isMethodInsnWith(Opcodes.INVOKEVIRTUAL) {
state.config.supportMultiFieldValueClasses && isMethodInsnWith(Opcodes.INVOKEVIRTUAL) {
isMultiFieldValueClassUnboxingMethodDescriptor(state)
}
@@ -100,4 +100,6 @@ class JvmBackendConfig(configuration: CompilerConfiguration) {
val noNewJavaAnnotationTargets: Boolean = configuration.getBoolean(JVMConfigurationKeys.NO_NEW_JAVA_ANNOTATION_TARGETS)
val oldInnerClassesLogic: Boolean = configuration.getBoolean(JVMConfigurationKeys.OLD_INNER_CLASSES_LOGIC)
val supportMultiFieldValueClasses: Boolean = languageVersionSettings.supportsFeature(LanguageFeature.ValueClasses)
}