Replicate old backend's naming logic for captured receiver parameter and extension receiver parameters.
Context for determine if a value parameter is captured from outer context is not directly available after lowering, hence introduce a new IrDeclarationOrigin for captured receiver parameter to avoid duplicate calculation.
This commit is contained in:
committed by
Yan Zhulanow
parent
9760c156a4
commit
2c102ecd57
+14
-2
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.backend.common.ScopeWithIr
|
||||
import org.jetbrains.kotlin.backend.common.descriptors.*
|
||||
import org.jetbrains.kotlin.backend.common.ir.*
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
@@ -55,6 +56,8 @@ val IrDeclaration.parents: Sequence<IrDeclarationParent>
|
||||
|
||||
object BOUND_VALUE_PARAMETER: IrDeclarationOriginImpl("BOUND_VALUE_PARAMETER")
|
||||
|
||||
object BOUND_RECEIVER_PARAMETER: IrDeclarationOriginImpl("BOUND_RECEIVER_PARAMETER")
|
||||
|
||||
class LocalDeclarationsLowering(
|
||||
val context: BackendContext,
|
||||
val localNameProvider: LocalNameProvider = LocalNameProvider.DEFAULT,
|
||||
@@ -530,8 +533,17 @@ class LocalDeclarationsLowering(
|
||||
val parameterDescriptor = WrappedValueParameterDescriptor()
|
||||
val p = capturedValue.owner
|
||||
IrValueParameterImpl(
|
||||
p.startOffset, p.endOffset, BOUND_VALUE_PARAMETER, IrValueParameterSymbolImpl(parameterDescriptor),
|
||||
suggestNameForCapturedValue(p), i, p.type, null, isCrossinline = false, isNoinline = false
|
||||
p.startOffset,
|
||||
p.endOffset,
|
||||
if (p.descriptor is ReceiverParameterDescriptor && newDeclaration is IrConstructor)
|
||||
BOUND_RECEIVER_PARAMETER else BOUND_VALUE_PARAMETER,
|
||||
IrValueParameterSymbolImpl(parameterDescriptor),
|
||||
suggestNameForCapturedValue(p),
|
||||
i,
|
||||
p.type,
|
||||
null,
|
||||
isCrossinline = false,
|
||||
isNoinline = false
|
||||
).also {
|
||||
parameterDescriptor.bind(it)
|
||||
it.parent = newDeclaration
|
||||
|
||||
Reference in New Issue
Block a user