diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt index 5b5f298eb9a..7b9d8e95c32 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/Utils.kt @@ -162,7 +162,7 @@ internal fun List.toPrimitiveStateArray(type: IrType): Primitive<*> { type.isLongArray() -> Primitive(LongArray(size) { i -> (this[i] as Number).toLong() }, type) type.isFloatArray() -> Primitive(FloatArray(size) { i -> (this[i] as Number).toFloat() }, type) type.isDoubleArray() -> Primitive(DoubleArray(size) { i -> (this[i] as Number).toDouble() }, type) - type.isBooleanArray() -> Primitive(BooleanArray(size) { i -> this[i].toString().toBoolean() }, type) + type.isBooleanArray() -> Primitive(BooleanArray(size) { i -> (this[i] as Boolean) }, type) else -> Primitive>(this.toTypedArray(), type) } } diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/intrinsics/IntrinsicImplementations.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/intrinsics/IntrinsicImplementations.kt index dc52b62f055..45a369caa55 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/intrinsics/IntrinsicImplementations.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/intrinsics/IntrinsicImplementations.kt @@ -13,12 +13,9 @@ import org.jetbrains.kotlin.ir.interpreter.* import org.jetbrains.kotlin.ir.interpreter.state.* import org.jetbrains.kotlin.ir.interpreter.state.reflection.KFunctionState import org.jetbrains.kotlin.ir.interpreter.state.reflection.KTypeState -import org.jetbrains.kotlin.ir.types.IrSimpleType -import org.jetbrains.kotlin.ir.types.classOrNull +import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.impl.buildSimpleType import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection -import org.jetbrains.kotlin.ir.types.isArray -import org.jetbrains.kotlin.ir.types.isCharArray import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable import org.jetbrains.kotlin.ir.util.resolveFakeOverride import org.jetbrains.kotlin.types.Variance @@ -241,7 +238,13 @@ internal object ArrayConstructor : IntrinsicBase() { override fun evaluate(irFunction: IrFunction, environment: IrInterpreterEnvironment) { val sizeDescriptor = irFunction.valueParameters[0].symbol val size = environment.callStack.getState(sizeDescriptor).asInt() - val arrayValue = MutableList(size) { if (irFunction.returnType.isCharArray()) 0.toChar() else 0 } + val arrayValue = MutableList(size) { + when { + irFunction.returnType.isCharArray() -> 0.toChar() + irFunction.returnType.isBooleanArray() -> false + else -> 0 + } + } if (irFunction.valueParameters.size == 2) { for (i in size - 1 downTo 0) { diff --git a/compiler/testData/ir/interpreter/collections/arrayConstructor.kt b/compiler/testData/ir/interpreter/collections/arrayConstructor.kt index 2a59aae462f..8ce941f8d7f 100644 Binary files a/compiler/testData/ir/interpreter/collections/arrayConstructor.kt and b/compiler/testData/ir/interpreter/collections/arrayConstructor.kt differ