JVM IR: Add Object.clone to JvmSymbols

The `clone` function is not available in the builtin classes created
from fir.
This commit is contained in:
Steven Schäfer
2021-03-16 18:54:22 +01:00
committed by Alexander Udalov
parent 99a4779c6b
commit bf2942b5cc
2 changed files with 9 additions and 4 deletions
@@ -850,6 +850,14 @@ class JvmSymbols(
val enumValueOfFunction: IrSimpleFunctionSymbol =
javaLangEnum.functionByName("valueOf")
private val javaLangObject: IrClassSymbol =
createClass(FqName("java.lang.Object")) { klass ->
klass.addFunction("clone", irBuiltIns.anyType)
}
val objectCloneFunction: IrSimpleFunctionSymbol =
javaLangObject.functionByName("clone")
private val kotlinCoroutinesJvmInternalRunSuspendKt =
createClass(FqName("kotlin.coroutines.jvm.internal.RunSuspendKt")) { klass ->
klass.addFunction("runSuspend", irBuiltIns.unitType, isStatic = true).apply {
@@ -154,10 +154,7 @@ private class EnumClassLowering(val context: JvmBackendContext) : ClassLoweringP
irExprBody(
when (body.kind) {
IrSyntheticBodyKind.ENUM_VALUES -> {
val cloneFun = context.irBuiltIns.arrayClass.functions.single {
it.owner.name.asString() == "clone"
}
irCall(cloneFun, declaration.returnType).apply {
irCall(this@EnumClassLowering.context.ir.symbols.objectCloneFunction, declaration.returnType).apply {
dispatchReceiver = irGetField(null, valuesField)
}
}