[FIR] Load kotlin.arrayOf function in IrBuiltInsOverFir from Fir

^KT-57690 Fixed
^KT-57807 Fixed
This commit is contained in:
Dmitriy Novozhilov
2023-04-04 16:35:34 +03:00
committed by Space Team
parent 6972391185
commit fb1cdf643b
4 changed files with 51 additions and 30 deletions
@@ -533,38 +533,12 @@ class IrBuiltInsOverFir(
}
}
private class KotlinPackageFuns(
val arrayOf: IrSimpleFunctionSymbol,
)
private val kotlinBuiltinFunctions by lazy {
fun IrClassSymbol.addPackageFun(
name: String,
returnType: IrType,
vararg argumentTypes: Pair<String, IrType>,
builder: IrSimpleFunction.() -> Unit
) =
kotlinIrPackage.createFunction(name, returnType, argumentTypes, postBuild = builder).also {
this.owner.declarations.add(it)
}.symbol
val kotlinKt = kotlinIrPackage.createClass(kotlinPackage.child(Name.identifier("KotlinKt")))
KotlinPackageFuns(
arrayOf = kotlinKt.addPackageFun("arrayOf", arrayClass.defaultType) arrayOf@{
val typeParameter = addTypeParameter("T", anyNType)
addValueParameter {
this.name = Name.identifier("elements")
this.type = arrayClass.typeWithParameters(listOf(typeParameter))
this.varargElementType = typeParameter.defaultType
this.origin = this@arrayOf.origin
}
returnType = arrayClass.typeWithParameters(listOf(typeParameter))
}
)
override val arrayOf: IrSimpleFunctionSymbol by lazy {
// distinct() is needed because we can get two Fir symbols for arrayOf function (from builtins and from stdlib)
// with the same IR symbol for them
findFunctions(kotlinPackage, Name.identifier("arrayOf")).distinct().single()
}
override val arrayOf: IrSimpleFunctionSymbol get() = kotlinBuiltinFunctions.arrayOf
private fun <T : Any> getFunctionsByKey(
name: Name,
vararg packageNameSegments: String,