[IR] Supported conversions to fun interfaces
This commit is contained in:
+7
-1
@@ -199,11 +199,17 @@ internal val dataClassesPhase = makeKonanFileLoweringPhase(
|
|||||||
description = "Data classes lowering"
|
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(
|
internal val builtinOperatorPhase = makeKonanFileLoweringPhase(
|
||||||
::BuiltinOperatorLowering,
|
::BuiltinOperatorLowering,
|
||||||
name = "BuiltinOperators",
|
name = "BuiltinOperators",
|
||||||
description = "BuiltIn operators lowering",
|
description = "BuiltIn operators lowering",
|
||||||
prerequisite = setOf(defaultParameterExtentPhase)
|
prerequisite = setOf(defaultParameterExtentPhase, singleAbstractMethodPhase)
|
||||||
)
|
)
|
||||||
|
|
||||||
internal val finallyBlocksPhase = makeKonanFileLoweringPhase(
|
internal val finallyBlocksPhase = makeKonanFileLoweringPhase(
|
||||||
|
|||||||
+2
-2
@@ -19,8 +19,7 @@ import org.jetbrains.kotlin.backend.konan.serialization.*
|
|||||||
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
|
||||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.konan.isKonanStdlib
|
import org.jetbrains.kotlin.descriptors.konan.isKonanStdlib
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||||
@@ -329,6 +328,7 @@ internal val allLoweringsPhase = namedIrModulePhase(
|
|||||||
defaultParameterExtentPhase then
|
defaultParameterExtentPhase then
|
||||||
innerClassPhase then
|
innerClassPhase then
|
||||||
dataClassesPhase then
|
dataClassesPhase then
|
||||||
|
singleAbstractMethodPhase then
|
||||||
builtinOperatorPhase then
|
builtinOperatorPhase then
|
||||||
finallyBlocksPhase then
|
finallyBlocksPhase then
|
||||||
testProcessorPhase then
|
testProcessorPhase then
|
||||||
|
|||||||
+19
@@ -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()}")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user