[IR] Fix bugs in MFVC function references support
Signed-off-by: Evgeniy.Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com> #KT-1179
This commit is contained in:
committed by
Space Team
parent
86809e898a
commit
b7f249cdb6
+5
@@ -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].
|
||||
*/
|
||||
|
||||
+4
-7
@@ -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()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+5
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user