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, oldFunction: IrFunction,
dispatchReceiverType: IrType? = oldFunction.dispatchReceiverParameter?.type, dispatchReceiverType: IrType? = oldFunction.dispatchReceiverParameter?.type,
origin: IrDeclarationOrigin = oldFunction.origin, origin: IrDeclarationOrigin = oldFunction.origin,
modality: Modality = Modality.FINAL, modality: Modality = Modality.FINAL
copyBody: Boolean = true
): IrSimpleFunction { ): IrSimpleFunction {
val descriptor = WrappedSimpleFunctionDescriptor(Annotations.EMPTY, oldFunction.descriptor.source) val descriptor = WrappedSimpleFunctionDescriptor(Annotations.EMPTY, oldFunction.descriptor.source)
return IrFunctionImpl( return IrFunctionImpl(
@@ -542,10 +541,6 @@ fun createStaticFunctionWithReceivers(
oldFunction.valueParameters.map { it.copyTo(this, index = it.index + offset) } oldFunction.valueParameters.map { it.copyTo(this, index = it.index + offset) }
) )
if (copyBody) {
copyBodyToStatic(oldFunction, this)
}
metadata = oldFunction.metadata metadata = oldFunction.metadata
} }
} }
@@ -237,5 +237,5 @@ class InlineClassLowering(val context: BackendContext) {
} }
private fun createStaticBodilessMethod(function: IrFunction): IrSimpleFunction = 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 package org.jetbrains.kotlin.backend.jvm.lower
import org.jetbrains.kotlin.backend.common.ClassLoweringPass 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.ir.passTypeArgumentsFrom
import org.jetbrains.kotlin.backend.common.lower.InitializersLowering.Companion.clinitName import org.jetbrains.kotlin.backend.common.lower.InitializersLowering.Companion.clinitName
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
@@ -56,7 +57,10 @@ private class InterfaceLowering(val context: JvmBackendContext) : IrElementTrans
removedFunctions[function.symbol] = it.symbol removedFunctions[function.symbol] = it.symbol
} }
members.add(element) members.add(element)
element.body = function.body?.patchDeclarationParents(element)
copyBodyToStatic(function, element)
element.body = element.body?.patchDeclarationParents(element)
if (function.hasJvmDefault() && if (function.hasJvmDefault() &&
function.origin != JvmLoweredDeclarationOrigin.SYNTHETIC_METHOD_FOR_PROPERTY_ANNOTATIONS function.origin != JvmLoweredDeclarationOrigin.SYNTHETIC_METHOD_FOR_PROPERTY_ANNOTATIONS
) { ) {
@@ -109,6 +109,6 @@ private class StaticDefaultCallLowering(
private fun JvmBackendContext.getStaticFunctionWithReceivers(function: IrFunction) = private fun JvmBackendContext.getStaticFunctionWithReceivers(function: IrFunction) =
staticDefaultStubs.getOrPut(function.symbol) { staticDefaultStubs.getOrPut(function.symbol) {
createStaticFunctionWithReceivers(function.parent, function.name, function, copyBody = false) createStaticFunctionWithReceivers(function.parent, function.name, function)
} }