diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/Ir.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/Ir.kt index 795854302cb..64bcaa5c1fe 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/Ir.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ir/Ir.kt @@ -109,6 +109,7 @@ internal class KonanSymbols( val nativePtrType = nativePtr.typeWith(arguments = emptyList()) val immutableBlobOf = nativeFunction(IMMUTABLE_BLOB_OF) + val immutableBlobOfImpl = internalFunction("immutableBlobOfImpl") val signedIntegerClasses = setOf(byte, short, int, long) val unsignedIntegerClasses = setOf(uByte!!, uShort!!, uInt!!, uLong!!) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PostInlineLowering.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PostInlineLowering.kt index f6e59d2cab3..68b0315938b 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PostInlineLowering.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/lower/PostInlineLowering.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.backend.konan.renderCompilerError import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope import org.jetbrains.kotlin.ir.builders.irCall import org.jetbrains.kotlin.ir.builders.irCallWithSubstitutedType +import org.jetbrains.kotlin.ir.builders.irString import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrDeclarationBase import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction @@ -91,10 +92,9 @@ internal class PostInlineLowering(val context: Context) : BodyLoweringPass { // Basic Multilingual Plane, so we could just append data "as is". builder.append(value.toInt().toChar()) } - expression.putValueArgument(0, IrConstImpl( - expression.startOffset, expression.endOffset, - context.irBuiltIns.stringType, - IrConstKind.String, builder.toString())) + return data.irCall(context.ir.symbols.immutableBlobOfImpl).apply { + putValueArgument(0, data.irString(builder.toString())) + } } return expression diff --git a/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/RuntimeUtils.kt b/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/RuntimeUtils.kt index 11446b7d74b..3c57d8d9080 100644 --- a/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/RuntimeUtils.kt +++ b/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/RuntimeUtils.kt @@ -264,3 +264,7 @@ internal fun KonanObjectToUtf8Array(value: Any?): ByteArray { } return string.encodeToByteArray() } + +@PublishedApi +@TypedIntrinsic(IntrinsicType.IMMUTABLE_BLOB) +internal external fun immutableBlobOfImpl(data: String): ImmutableBlob