From e4f9314f94a492f4e33e4b6064c85a4ab4bcf017 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Tue, 13 Aug 2019 09:56:59 +0300 Subject: [PATCH] Use ISE instead of NPE in serialization --- .../kotlin/ir/builders/ExpressionHelpers.kt | 12 ++++++++++++ .../jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt | 1 - .../compiler/backend/ir/SerializerIrGenerator.kt | 4 ++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt index 00ce660cb6b..ee2640b86f8 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt @@ -392,3 +392,15 @@ inline fun IrBuilderWithScope.irBlockBody( startOffset, endOffset ).blockBody(body) + +fun IrBuilderWithScope.irThrowIse(origin: IrStatementOrigin? = null) = + IrCallImpl( + startOffset, endOffset, + context.irBuiltIns.nothingType, + context.irBuiltIns.throwIseSymbol, + context.irBuiltIns.throwIseSymbol.descriptor, + typeArgumentsCount = 0, + valueArgumentsCount = 0, + origin = origin + ) + diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt index 734ac89f460..f2a6b61fd1a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltIns.kt @@ -295,7 +295,6 @@ class IrBuiltIns( const val EQEQ = "EQEQ" const val EQEQEQ = "EQEQEQ" const val IEEE754_EQUALS = "ieee754equals" - const val THROW_NPE = "THROW_NPE" const val THROW_CCE = "THROW_CCE" const val THROW_ISE = "THROW_ISE" const val NO_WHEN_BRANCH_MATCHED_EXCEPTION = "noWhenBranchMatchedException" diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt index e85fb79d25a..93acfa8150c 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt @@ -351,7 +351,7 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext: +irSetVar(indexVar.symbol, irInvoke(localInput.get(), readElementF, localSerialDesc.get())) +irWhen { // if index == -2 (READ_ALL) todo... - +IrBranchImpl(irEquals(indexVar.get(), irInt(-2)), irThrowNpe()) + +IrBranchImpl(irEquals(indexVar.get(), irInt(-2)), irThrowIse()) // TODO throw proper exception // if index == -1 (READ_DONE) break loop +IrBranchImpl(irEquals(indexVar.get(), irInt(-1)), irSetVar(flagVar.symbol, irBoolean(false))) @@ -436,7 +436,7 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext: if (serializableDescriptor.modality != Modality.ABSTRACT && serializableDescriptor.modality != Modality.SEALED) { +irReturn(irInvoke(null, ctor, typeArgs, args)) } else { - +irThrowNpe() + +irThrowIse() // TODO throw proper exception } }