From 41acdefce91c25e7062f7a7937e3595a3c7cb0a0 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Fri, 10 Dec 2021 16:35:29 +0300 Subject: [PATCH] [JS IR] Treat char as inline class no matter how it's declared --- .../kotlin/ir/backend/js/utils/JsInlineClassesUtils.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/JsInlineClassesUtils.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/JsInlineClassesUtils.kt index 5bbfbed2837..f31d4a138ba 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/JsInlineClassesUtils.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/JsInlineClassesUtils.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.ir.backend.js.JsCommonInlineClassesUtils import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol +import org.jetbrains.kotlin.ir.types.IdSignatureValues import org.jetbrains.kotlin.ir.types.IrSimpleType import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.isMarkedNullable @@ -38,8 +39,11 @@ class JsInlineClassesUtils(val context: JsIrBackendContext) : JsCommonInlineClas return null } + // Char is declared as a regular class, but we want to treat it as an inline class. + // We can't declare it as an inline/value class for compatibility reasons. + // For example, applying the === operator will stop working if Char becomes an inline class. override fun isClassInlineLike(klass: IrClass): Boolean = - klass.isInline + super.isClassInlineLike(klass) || klass.symbol.signature == IdSignatureValues._char override val boxIntrinsic: IrSimpleFunctionSymbol get() = context.intrinsics.jsBoxIntrinsic