Extract immutable arrays to fields in IrBuiltInsOverFir

This commit is contained in:
Ivan Kochurkin
2022-08-04 00:51:54 +02:00
committed by teamcity
parent c0fe14a091
commit 09a72fd679
@@ -303,6 +303,16 @@ class IrBuiltInsOverFir(
override val primitiveIrTypes = listOf(booleanType) + primitiveIrTypesWithComparisons override val primitiveIrTypes = listOf(booleanType) + primitiveIrTypesWithComparisons
private val baseIrTypes = primitiveIrTypes + stringType private val baseIrTypes = primitiveIrTypes + stringType
private val bitwiseOperators = arrayOf(OperatorNameConventions.AND, OperatorNameConventions.OR, OperatorNameConventions.XOR)
private val shiftOperators = arrayOf(OperatorNameConventions.SHL, OperatorNameConventions.SHR, OperatorNameConventions.USHR)
private val arithmeticOperators = arrayOf(
OperatorNameConventions.PLUS,
OperatorNameConventions.MINUS,
OperatorNameConventions.TIMES,
OperatorNameConventions.DIV,
OperatorNameConventions.REM
)
private fun getPrimitiveArithmeticOperatorResultType(target: IrType, arg: IrType) = private fun getPrimitiveArithmeticOperatorResultType(target: IrType, arg: IrType) =
when { when {
arg == doubleType -> arg arg == doubleType -> arg
@@ -1063,10 +1073,10 @@ class IrBuiltInsOverFir(
} }
private fun IrClass.createStandardBitwiseOps(thisType: IrType) { private fun IrClass.createStandardBitwiseOps(thisType: IrType) {
for (op in arrayOf(OperatorNameConventions.AND, OperatorNameConventions.OR, OperatorNameConventions.XOR)) { for (op in bitwiseOperators) {
createMemberFunction(op, thisType, "other" to thisType, isOperator = true) createMemberFunction(op, thisType, "other" to thisType, isOperator = true)
} }
for (op in arrayOf(OperatorNameConventions.SHL, OperatorNameConventions.SHR, OperatorNameConventions.USHR)) { for (op in shiftOperators) {
createMemberFunction(op, thisType, "bitCount" to intType, isOperator = true) createMemberFunction(op, thisType, "bitCount" to intType, isOperator = true)
} }
createMemberFunction(OperatorNameConventions.INV, thisType, isOperator = true) createMemberFunction(OperatorNameConventions.INV, thisType, isOperator = true)
@@ -1090,13 +1100,7 @@ class IrBuiltInsOverFir(
isOperator = true isOperator = true
) )
val targetArithmeticReturnType = getPrimitiveArithmeticOperatorResultType(thisType, argument) val targetArithmeticReturnType = getPrimitiveArithmeticOperatorResultType(thisType, argument)
for (op in arrayOf( for (op in arithmeticOperators) {
OperatorNameConventions.PLUS,
OperatorNameConventions.MINUS,
OperatorNameConventions.TIMES,
OperatorNameConventions.DIV,
OperatorNameConventions.REM
)) {
createMemberFunction(op, targetArithmeticReturnType, "other" to argument, isOperator = true) createMemberFunction(op, targetArithmeticReturnType, "other" to argument, isOperator = true)
} }
} }