[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"
|
||||
)
|
||||
|
||||
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(
|
||||
|
||||
+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.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
|
||||
|
||||
+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