[IR] Supported conversions to fun interfaces

This commit is contained in:
Igor Chevdar
2020-01-31 14:48:34 +03:00
parent 5fcfa45c1c
commit d98eb2c40b
3 changed files with 28 additions and 3 deletions
@@ -199,11 +199,17 @@ internal val dataClassesPhase = makeKonanFileLoweringPhase(
description = "Data classes lowering"
)
internal val singleAbstractMethodPhase = makeKonanFileLoweringPhase(
::NativeSingleAbstractMethodLowering,
name = "SingleAbstractMethod",
description = "Replace SAM conversions with instances of interface-implementing classes"
)
internal val builtinOperatorPhase = makeKonanFileLoweringPhase(
::BuiltinOperatorLowering,
name = "BuiltinOperators",
description = "BuiltIn operators lowering",
prerequisite = setOf(defaultParameterExtentPhase)
prerequisite = setOf(defaultParameterExtentPhase, singleAbstractMethodPhase)
)
internal val finallyBlocksPhase = makeKonanFileLoweringPhase(
@@ -19,8 +19,7 @@ import org.jetbrains.kotlin.backend.konan.serialization.*
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.konan.isKonanStdlib
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
@@ -329,6 +328,7 @@ internal val allLoweringsPhase = namedIrModulePhase(
defaultParameterExtentPhase then
innerClassPhase then
dataClassesPhase then
singleAbstractMethodPhase then
builtinOperatorPhase then
finallyBlocksPhase then
testProcessorPhase then
@@ -0,0 +1,19 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the LICENSE file.
*/
package org.jetbrains.kotlin.backend.konan.lower
import org.jetbrains.kotlin.backend.common.lower.SingleAbstractMethodLowering
import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.classOrNull
import org.jetbrains.kotlin.ir.types.defaultType
import org.jetbrains.kotlin.ir.util.render
internal class NativeSingleAbstractMethodLowering(context: Context) : SingleAbstractMethodLowering(context) {
override fun getSuperTypeForWrapper(typeOperand: IrType): IrType {
return typeOperand.classOrNull?.defaultType ?: error("Unsupported SAM conversion: ${typeOperand.render()}")
}
}