JVM IR: generate delegates to DefaultImpls for fun interfaces

This commit is contained in:
Alexander Udalov
2020-05-01 18:58:45 +02:00
parent fc1217ba07
commit 6adad1055b
7 changed files with 16 additions and 16 deletions
@@ -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)
@@ -367,7 +367,7 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
}
coroutineClass.superTypes += superTypes
coroutineClass.addFakeOverrides()
coroutineClass.addFakeOverridesViaIncorrectHeuristic()
initializeStateMachine(coroutineConstructors, coroutineClassThis)
@@ -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
}