IR: Refactor IrBuiltIns to abstract it from descriptors

This commit is contained in:
Ilya Chernikov
2021-04-28 13:43:14 +02:00
committed by TeamCityServer
parent 25d2e61a82
commit dee0487185
124 changed files with 1231 additions and 970 deletions
@@ -14,11 +14,16 @@ import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.kotlin.generators.util.GeneratorsFileUtil
import org.jetbrains.kotlin.ir.BuiltInOperatorNames
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
import org.jetbrains.kotlin.ir.descriptors.IrBuiltInsOverDescriptors
import org.jetbrains.kotlin.ir.symbols.IrFileSymbol
import org.jetbrains.kotlin.ir.types.impl.originalKotlinType
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.util.IdSignature
import org.jetbrains.kotlin.ir.util.IdSignatureComposer
import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi2ir.generators.TypeTranslatorImpl
import org.jetbrains.kotlin.storage.LockBasedStorageManager
@@ -165,7 +170,7 @@ private data class Operation(
val receiver = castValueParenthesized("a", typeA)
println(name)
return when {
name == IrBuiltIns.OperatorNames.EQEQEQ && parameterTypes.all { it == "Any?" } ->
name == BuiltInOperatorNames.EQEQEQ && parameterTypes.all { it == "Any?" } ->
"if (a is Proxy && b is Proxy) a.state === b.state else a === b"
customExpression != null -> customExpression
else -> buildString {
@@ -244,19 +249,20 @@ private fun getBinaryIrOperationMap(irBuiltIns: IrBuiltIns): List<Operation> {
private fun getIrMethodSymbolByName(methodName: String): String {
return when (methodName) {
IrBuiltIns.OperatorNames.LESS -> "<"
IrBuiltIns.OperatorNames.LESS_OR_EQUAL -> "<="
IrBuiltIns.OperatorNames.GREATER -> ">"
IrBuiltIns.OperatorNames.GREATER_OR_EQUAL -> ">="
IrBuiltIns.OperatorNames.EQEQ -> "=="
IrBuiltIns.OperatorNames.EQEQEQ -> "==="
IrBuiltIns.OperatorNames.IEEE754_EQUALS -> "=="
IrBuiltIns.OperatorNames.ANDAND -> "&&"
IrBuiltIns.OperatorNames.OROR -> "||"
BuiltInOperatorNames.LESS -> "<"
BuiltInOperatorNames.LESS_OR_EQUAL -> "<="
BuiltInOperatorNames.GREATER -> ">"
BuiltInOperatorNames.GREATER_OR_EQUAL -> ">="
BuiltInOperatorNames.EQEQ -> "=="
BuiltInOperatorNames.EQEQEQ -> "==="
BuiltInOperatorNames.IEEE754_EQUALS -> "=="
BuiltInOperatorNames.ANDAND -> "&&"
BuiltInOperatorNames.OROR -> "||"
else -> throw UnsupportedOperationException("Unknown ir operation \"$methodName\"")
}
}
@OptIn(ObsoleteDescriptorBasedAPI::class)
private fun getIrBuiltIns(): IrBuiltIns {
val languageSettings = LanguageVersionSettingsImpl(LanguageVersion.KOTLIN_1_3, ApiVersion.KOTLIN_1_3)
@@ -272,5 +278,5 @@ private fun getIrBuiltIns(): IrBuiltIns {
}
val symbolTable = SymbolTable(signaturer, IrFactoryImpl)
val typeTranslator = TypeTranslatorImpl(symbolTable, languageSettings, moduleDescriptor)
return IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable)
return IrBuiltInsOverDescriptors(moduleDescriptor.builtIns, typeTranslator, symbolTable)
}