From be002fc4176cca1347e97d3791e1a0e4c7626c06 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Tue, 17 Sep 2019 16:33:46 +0300 Subject: [PATCH] JVM_IR: do not copy bodies when creating static functions --- .../src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt | 7 +------ .../backend/common/lower/InlineClassDeclarationLowering.kt | 2 +- .../kotlin/backend/jvm/lower/InterfaceLowering.kt | 6 +++++- .../backend/jvm/lower/StaticDefaultFunctionLowering.kt | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt index 7887beea575..5c880875172 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/ir/IrUtils.kt @@ -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 } } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InlineClassDeclarationLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InlineClassDeclarationLowering.kt index abb4a4fbe1c..f611c1f2d0f 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InlineClassDeclarationLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/InlineClassDeclarationLowering.kt @@ -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) } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/InterfaceLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/InterfaceLowering.kt index 54620714c79..803f8a2bcbd 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/InterfaceLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/InterfaceLowering.kt @@ -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 ) { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/StaticDefaultFunctionLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/StaticDefaultFunctionLowering.kt index a8265a73e15..dcecbdc3854 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/StaticDefaultFunctionLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/StaticDefaultFunctionLowering.kt @@ -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) }