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:
committed by
Alexander Udalov
parent
99a4779c6b
commit
bf2942b5cc
@@ -850,6 +850,14 @@ class JvmSymbols(
|
|||||||
val enumValueOfFunction: IrSimpleFunctionSymbol =
|
val enumValueOfFunction: IrSimpleFunctionSymbol =
|
||||||
javaLangEnum.functionByName("valueOf")
|
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 =
|
private val kotlinCoroutinesJvmInternalRunSuspendKt =
|
||||||
createClass(FqName("kotlin.coroutines.jvm.internal.RunSuspendKt")) { klass ->
|
createClass(FqName("kotlin.coroutines.jvm.internal.RunSuspendKt")) { klass ->
|
||||||
klass.addFunction("runSuspend", irBuiltIns.unitType, isStatic = true).apply {
|
klass.addFunction("runSuspend", irBuiltIns.unitType, isStatic = true).apply {
|
||||||
|
|||||||
+1
-4
@@ -154,10 +154,7 @@ private class EnumClassLowering(val context: JvmBackendContext) : ClassLoweringP
|
|||||||
irExprBody(
|
irExprBody(
|
||||||
when (body.kind) {
|
when (body.kind) {
|
||||||
IrSyntheticBodyKind.ENUM_VALUES -> {
|
IrSyntheticBodyKind.ENUM_VALUES -> {
|
||||||
val cloneFun = context.irBuiltIns.arrayClass.functions.single {
|
irCall(this@EnumClassLowering.context.ir.symbols.objectCloneFunction, declaration.returnType).apply {
|
||||||
it.owner.name.asString() == "clone"
|
|
||||||
}
|
|
||||||
irCall(cloneFun, declaration.returnType).apply {
|
|
||||||
dispatchReceiver = irGetField(null, valuesField)
|
dispatchReceiver = irGetField(null, valuesField)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user