[IR] Fix bugs in MFVC function references support

Signed-off-by: Evgeniy.Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com>

#KT-1179
This commit is contained in:
Evgeniy.Zhelenskiy
2022-11-17 23:31:33 +01:00
committed by Space Team
parent 86809e898a
commit b7f249cdb6
20 changed files with 4375 additions and 398 deletions
@@ -72,6 +72,11 @@ interface CommonBackendContext : BackendContext, LoggingContext, ErrorReportingC
val optimizeNullChecksUsingKotlinNullability: Boolean
get() = true
fun remapMultiFieldValueClassStructure(
oldFunction: IrFunction, newFunction: IrFunction,
parametersMappingOrNull: Map<IrValueParameter, IrValueParameter>?
) = Unit
/**
* See [InlineClassesUtils].
*/
@@ -9,15 +9,11 @@ import org.jetbrains.kotlin.backend.common.BodyLoweringPass
import org.jetbrains.kotlin.backend.common.CommonBackendContext
import org.jetbrains.kotlin.backend.common.DeclarationTransformer
import org.jetbrains.kotlin.backend.common.descriptors.synthesizedString
import org.jetbrains.kotlin.backend.common.ir.*
import org.jetbrains.kotlin.backend.common.ir.ValueRemapper
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter
import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
import org.jetbrains.kotlin.ir.builders.declarations.buildFun
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.*
@@ -32,7 +28,6 @@ import org.jetbrains.kotlin.ir.types.makeNullable
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.util.OperatorNameConventions
// TODO: fix expect/actual default parameters
@@ -521,7 +516,9 @@ private class MaskedDefaultArgumentFunctionFactory(context: CommonBackendContext
IrDeclarationOrigin.METHOD_HANDLER_IN_DEFAULT_FUNCTION
)
}
context.remapMultiFieldValueClassStructure(
original, this, parametersMappingOrNull = original.explicitParameters.zip(explicitParameters).toMap()
)
}
}
@@ -705,6 +705,11 @@ class LocalDeclarationsLowering(
isExplicitLocalFunction = oldDeclaration.origin == IrDeclarationOrigin.LOCAL_FUNCTION
)
newDeclaration.recordTransformedValueParameters(localFunctionContext)
val parametersMapping = buildMap {
oldDeclaration.extensionReceiverParameter?.let { put(it, newDeclaration.extensionReceiverParameter!!) }
putAll(oldDeclaration.valueParameters zip newDeclaration.valueParameters.takeLast(oldDeclaration.valueParameters.size))
}
context.remapMultiFieldValueClassStructure(oldDeclaration, newDeclaration, parametersMapping)
newDeclaration.annotations = oldDeclaration.annotations