JVM IR: generate delegates to DefaultImpls for fun interfaces
This commit is contained in:
@@ -485,7 +485,7 @@ val IrFunction.allParameters: List<IrValueParameter>
|
||||
explicitParameters
|
||||
}
|
||||
|
||||
fun IrClass.addFakeOverrides(implementedMembers: List<IrSimpleFunction> = emptyList()) {
|
||||
fun IrClass.addFakeOverridesViaIncorrectHeuristic(implementedMembers: List<IrSimpleFunction> = emptyList()) {
|
||||
fun IrDeclaration.toList() = when (this) {
|
||||
is IrSimpleFunction -> listOf(this)
|
||||
is IrProperty -> listOfNotNull(getter, setter)
|
||||
@@ -519,7 +519,7 @@ fun IrClass.addFakeOverrides(implementedMembers: List<IrSimpleFunction> = emptyL
|
||||
IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||
IrSimpleFunctionSymbolImpl(descriptor),
|
||||
irFunction.name,
|
||||
Visibilities.INHERITED,
|
||||
Visibilities.PUBLIC,
|
||||
irFunction.modality,
|
||||
irFunction.returnType,
|
||||
isInline = irFunction.isInline,
|
||||
@@ -531,7 +531,7 @@ fun IrClass.addFakeOverrides(implementedMembers: List<IrSimpleFunction> = emptyL
|
||||
isOperator = irFunction.isOperator
|
||||
).apply {
|
||||
descriptor.bind(this)
|
||||
parent = this@addFakeOverrides
|
||||
parent = this@addFakeOverridesViaIncorrectHeuristic
|
||||
overriddenSymbols = overriddenFunctions.map { it.symbol }
|
||||
copyParameterDeclarationsFrom(irFunction)
|
||||
copyAttributes(irFunction)
|
||||
|
||||
+1
-1
@@ -367,7 +367,7 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
|
||||
}
|
||||
|
||||
coroutineClass.superTypes += superTypes
|
||||
coroutineClass.addFakeOverrides()
|
||||
coroutineClass.addFakeOverridesViaIncorrectHeuristic()
|
||||
|
||||
initializeStateMachine(coroutineConstructors, coroutineClassThis)
|
||||
|
||||
|
||||
+2
-2
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.backend.common.lower
|
||||
import org.jetbrains.kotlin.backend.common.CommonBackendContext
|
||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext
|
||||
import org.jetbrains.kotlin.backend.common.ir.addFakeOverrides
|
||||
import org.jetbrains.kotlin.backend.common.ir.addFakeOverridesViaIncorrectHeuristic
|
||||
import org.jetbrains.kotlin.backend.common.ir.copyTo
|
||||
import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
@@ -215,7 +215,7 @@ abstract class SingleAbstractMethodLowering(val context: CommonBackendContext) :
|
||||
|
||||
generateEqualsHashCode(subclass, superType, field)
|
||||
|
||||
subclass.addFakeOverrides()
|
||||
subclass.addFakeOverridesViaIncorrectHeuristic()
|
||||
|
||||
return subclass
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user