Fix binary compatibility for inlined local delegated properies
#KT-54650 Fixed
This commit is contained in:
+17
-5
@@ -8,13 +8,14 @@ package org.jetbrains.kotlin.backend.common.lower
|
||||
import org.jetbrains.kotlin.backend.common.BodyLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.CommonBackendContext
|
||||
import org.jetbrains.kotlin.backend.common.descriptors.synthesizedString
|
||||
import org.jetbrains.kotlin.backend.common.ir.*
|
||||
import org.jetbrains.kotlin.backend.common.lower.inline.isInlineParameter
|
||||
import org.jetbrains.kotlin.backend.common.runOnFilePostfix
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.ir.*
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildFun
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildValueParameter
|
||||
@@ -25,7 +26,9 @@ import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.transformStatement
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.defaultType
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
@@ -71,6 +74,7 @@ class LocalDeclarationsLowering(
|
||||
val localNameSanitizer: (String) -> String = { it },
|
||||
val visibilityPolicy: VisibilityPolicy = VisibilityPolicy.DEFAULT,
|
||||
val suggestUniqueNames: Boolean = true, // When `true` appends a `$#index` suffix to lifted declaration names
|
||||
val compatibilityModeForInlinedLocalDelegatedPropertyAccessors: Boolean = false, // Keep old names because of KT-49030
|
||||
val forceFieldsForInlineCaptures: Boolean = false, // See `LocalClassContext`
|
||||
private val postLocalDeclarationLoweringCallback: ((IntermediateDatastructures) -> Unit)? = null
|
||||
) :
|
||||
@@ -620,8 +624,16 @@ class LocalDeclarationsLowering(
|
||||
val declarationName = localNameSanitizer(declaration.name.asString())
|
||||
localFunctions[declaration]?.let {
|
||||
val baseName = if (declaration.name.isSpecial) "lambda" else declarationName
|
||||
if (it.index >= 0)
|
||||
return if (suggestUniqueNames) "$baseName\$${it.index}" else baseName
|
||||
if (it.index >= 0) {
|
||||
if (!suggestUniqueNames) return baseName
|
||||
|
||||
val separator = if (
|
||||
compatibilityModeForInlinedLocalDelegatedPropertyAccessors &&
|
||||
declaration.origin == IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR &&
|
||||
container is IrFunction && container.isInline
|
||||
) "-" else "$"
|
||||
return "$baseName$separator${it.index}"
|
||||
}
|
||||
}
|
||||
|
||||
return declarationName
|
||||
|
||||
Reference in New Issue
Block a user