JVM_IR: do not copy bodies when creating static functions

This commit is contained in:
Georgy Bronnikov
2019-09-17 16:33:46 +03:00
parent 4920d71d70
commit be002fc417
4 changed files with 8 additions and 9 deletions
@@ -504,8 +504,7 @@ fun createStaticFunctionWithReceivers(
oldFunction: IrFunction,
dispatchReceiverType: IrType? = oldFunction.dispatchReceiverParameter?.type,
origin: IrDeclarationOrigin = oldFunction.origin,
modality: Modality = Modality.FINAL,
copyBody: Boolean = true
modality: Modality = Modality.FINAL
): IrSimpleFunction {
val descriptor = WrappedSimpleFunctionDescriptor(Annotations.EMPTY, oldFunction.descriptor.source)
return IrFunctionImpl(
@@ -542,10 +541,6 @@ fun createStaticFunctionWithReceivers(
oldFunction.valueParameters.map { it.copyTo(this, index = it.index + offset) }
)
if (copyBody) {
copyBodyToStatic(oldFunction, this)
}
metadata = oldFunction.metadata
}
}
@@ -237,5 +237,5 @@ class InlineClassLowering(val context: BackendContext) {
}
private fun createStaticBodilessMethod(function: IrFunction): IrSimpleFunction =
createStaticFunctionWithReceivers(function.parent, function.name.toInlineClassImplementationName(), function, copyBody = false)
createStaticFunctionWithReceivers(function.parent, function.name.toInlineClassImplementationName(), function)
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.backend.jvm.lower
import org.jetbrains.kotlin.backend.common.ClassLoweringPass
import org.jetbrains.kotlin.backend.common.ir.copyBodyToStatic
import org.jetbrains.kotlin.backend.common.ir.passTypeArgumentsFrom
import org.jetbrains.kotlin.backend.common.lower.InitializersLowering.Companion.clinitName
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
@@ -56,7 +57,10 @@ private class InterfaceLowering(val context: JvmBackendContext) : IrElementTrans
removedFunctions[function.symbol] = it.symbol
}
members.add(element)
element.body = function.body?.patchDeclarationParents(element)
copyBodyToStatic(function, element)
element.body = element.body?.patchDeclarationParents(element)
if (function.hasJvmDefault() &&
function.origin != JvmLoweredDeclarationOrigin.SYNTHETIC_METHOD_FOR_PROPERTY_ANNOTATIONS
) {
@@ -109,6 +109,6 @@ private class StaticDefaultCallLowering(
private fun JvmBackendContext.getStaticFunctionWithReceivers(function: IrFunction) =
staticDefaultStubs.getOrPut(function.symbol) {
createStaticFunctionWithReceivers(function.parent, function.name, function, copyBody = false)
createStaticFunctionWithReceivers(function.parent, function.name, function)
}