JVM_IR: do not copy bodies when creating static functions
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -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
|
||||||
) {
|
) {
|
||||||
|
|||||||
+1
-1
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user