41 lines
1.3 KiB
Kotlin
41 lines
1.3 KiB
Kotlin
/*
|
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
*/
|
|
|
|
package org.jetbrains.kotlin.generators.builtins.numbers.primitives
|
|
|
|
import org.jetbrains.kotlin.generators.builtins.PrimitiveType
|
|
|
|
internal const val END_LINE = "\n"
|
|
internal const val intrinsicConstEvaluationAnnotation = "kotlin.internal.IntrinsicConstEvaluation"
|
|
|
|
internal fun PrimitiveType.castToIfNecessary(otherType: PrimitiveType): String {
|
|
if (this !in PrimitiveType.onlyNumeric || otherType !in PrimitiveType.onlyNumeric) {
|
|
throw IllegalArgumentException("Cannot cast to non-numeric type")
|
|
}
|
|
|
|
if (this == otherType) return ""
|
|
|
|
if (this.ordinal < otherType.ordinal) {
|
|
return ".to${otherType.capitalized}()"
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
internal fun operatorSign(methodName: String): String {
|
|
return when (methodName) {
|
|
"plus" -> "+"
|
|
"minus" -> "-"
|
|
"times" -> "*"
|
|
"div" -> "/"
|
|
"rem" -> "%"
|
|
else -> throw IllegalArgumentException("Unsupported binary operation: ${methodName}")
|
|
}
|
|
}
|
|
|
|
internal fun String.toPrimitiveType(): PrimitiveType {
|
|
return PrimitiveType.valueOf(this.uppercase())
|
|
}
|