Add JvmSymbols.String & StringBuilder for FIR mode to fix context initialization
This commit fixes in particular testFirHello
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.backend.jvm
|
package org.jetbrains.kotlin.backend.jvm
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.ir.Symbols
|
import org.jetbrains.kotlin.backend.common.ir.Symbols
|
||||||
|
import org.jetbrains.kotlin.backend.common.ir.copyTo
|
||||||
import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor
|
import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor
|
||||||
import org.jetbrains.kotlin.backend.jvm.intrinsics.IrIntrinsicMethods
|
import org.jetbrains.kotlin.backend.jvm.intrinsics.IrIntrinsicMethods
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
@@ -21,10 +22,8 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
|
|||||||
import org.jetbrains.kotlin.ir.symbols.*
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrExternalPackageFragmentSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrExternalPackageFragmentSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.types.*
|
import org.jetbrains.kotlin.ir.types.*
|
||||||
import org.jetbrains.kotlin.ir.util.ReferenceSymbolTable
|
import org.jetbrains.kotlin.ir.types.defaultType
|
||||||
import org.jetbrains.kotlin.ir.util.constructors
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.ir.util.fields
|
|
||||||
import org.jetbrains.kotlin.ir.util.functions
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
@@ -124,8 +123,24 @@ class JvmSymbols(
|
|||||||
val intrinsicStringPlus: IrFunctionSymbol =
|
val intrinsicStringPlus: IrFunctionSymbol =
|
||||||
intrinsicsClass.functions.single { it.owner.name.asString() == "stringPlus" }
|
intrinsicsClass.functions.single { it.owner.name.asString() == "stringPlus" }
|
||||||
|
|
||||||
|
private val firStringBuilder =
|
||||||
|
if (firMode) {
|
||||||
|
createClass(FqName("java.lang.StringBuilder")) { klass ->
|
||||||
|
klass.addConstructor()
|
||||||
|
klass.addFunction("toString", returnType = irBuiltIns.stringType, modality = Modality.OPEN).apply {
|
||||||
|
dispatchReceiverParameter = any.owner.thisReceiver!!.copyTo(this)
|
||||||
|
overriddenSymbols += any.functionByName("toString")
|
||||||
|
}
|
||||||
|
klass.addFunction("append", returnType = klass.defaultType).apply {
|
||||||
|
addValueParameter("value", type = irBuiltIns.anyNType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
override val stringBuilder: IrClassSymbol
|
override val stringBuilder: IrClassSymbol
|
||||||
get() = context.getTopLevelClass(FqName("java.lang.StringBuilder"))
|
get() = firStringBuilder ?: context.getTopLevelClass(FqName("java.lang.StringBuilder"))
|
||||||
|
|
||||||
override val defaultConstructorMarker: IrClassSymbol =
|
override val defaultConstructorMarker: IrClassSymbol =
|
||||||
createClass(FqName("kotlin.jvm.internal.DefaultConstructorMarker"))
|
createClass(FqName("kotlin.jvm.internal.DefaultConstructorMarker"))
|
||||||
@@ -459,7 +474,16 @@ class JvmSymbols(
|
|||||||
returnType = irBuiltIns.stringType
|
returnType = irBuiltIns.stringType
|
||||||
}.symbol
|
}.symbol
|
||||||
|
|
||||||
private val javaLangString: IrClassSymbol = context.getTopLevelClass(FqName("java.lang.String"))
|
private val javaLangString: IrClassSymbol =
|
||||||
|
if (firMode) {
|
||||||
|
createClass(FqName("java.lang.String")) { klass ->
|
||||||
|
klass.addFunction("valueOf", returnType = irBuiltIns.stringType, isStatic = true).apply {
|
||||||
|
addValueParameter("value", irBuiltIns.anyNType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
context.getTopLevelClass(FqName("java.lang.String"))
|
||||||
|
}
|
||||||
|
|
||||||
private val defaultValueOfFunction = javaLangString.functions.single {
|
private val defaultValueOfFunction = javaLangString.functions.single {
|
||||||
it.owner.name.asString() == "valueOf" && it.owner.valueParameters.singleOrNull()?.type?.isNullableAny() == true
|
it.owner.name.asString() == "valueOf" && it.owner.valueParameters.singleOrNull()?.type?.isNullableAny() == true
|
||||||
|
|||||||
Reference in New Issue
Block a user