From d6a324658676e84bf26c139655fa3ab98edd6064 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Thu, 8 Sep 2016 17:22:07 +0300 Subject: [PATCH] Use throwNoSuchSlot consistently. --- .../ir/declarations/IrAnonymousInitializer.kt | 1 + .../jetbrains/kotlin/ir/declarations/IrEnumEntry.kt | 1 + .../ir/declarations/IrLocalDelegatedProperty.kt | 1 + .../jetbrains/kotlin/ir/declarations/IrTypeAlias.kt | 3 ++- .../org/jetbrains/kotlin/ir/expressions/IrBlock.kt | 12 ++++++------ .../org/jetbrains/kotlin/ir/expressions/IrBody.kt | 1 + .../kotlin/ir/expressions/IrErrorExpression.kt | 2 ++ .../jetbrains/kotlin/ir/expressions/IrGetClass.kt | 1 + .../org/jetbrains/kotlin/ir/expressions/IrLoop.kt | 1 + .../kotlin/ir/expressions/IrPrimitiveCall.kt | 2 +- .../kotlin/ir/expressions/IrStringConcatenation.kt | 13 +++++-------- .../jetbrains/kotlin/ir/expressions/IrTryCatch.kt | 4 ++++ .../org/jetbrains/kotlin/ir/expressions/IrVararg.kt | 2 ++ .../org/jetbrains/kotlin/ir/expressions/IrWhen.kt | 4 ++-- 14 files changed, 30 insertions(+), 18 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt index 386bab20ca5..0d9deb83076 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt @@ -55,6 +55,7 @@ class IrAnonymousInitializerImpl( override fun replaceChild(slot: Int, newChild: IrElement) { when (slot) { ANONYMOUS_INITIALIZER_BODY_SLOT -> body = newChild.assertCast() + else -> throwNoSuchSlot(slot) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt index 842741f42e4..fd686f43237 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt @@ -66,6 +66,7 @@ class IrEnumEntryImpl( when (slot) { ENUM_ENTRY_CLASS_SLOT -> correspondingClass = newChild.assertCast() ENUM_ENTRY_INITIALIZER_SLOT -> initializerExpression = newChild.assertCast() + else -> throwNoSuchSlot(slot) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt index 060e4f73bc5..5f483361d74 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrLocalDelegatedProperty.kt @@ -96,6 +96,7 @@ class IrLocalDelegatedPropertyImpl( DELEGATE_SLOT -> delegate = newChild.assertCast() PROPERTY_GETTER_SLOT -> getter = newChild.assertCast() PROPERTY_SETTER_SLOT -> setter = newChild.assertCast() + else -> throwNoSuchSlot(slot) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt index 4f87a6fa452..ac9e98d24e2 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.throwNoSuchSlot import org.jetbrains.kotlin.ir.visitors.IrElementVisitor interface IrTypeAlias : IrDeclaration { @@ -44,6 +45,6 @@ class IrTypeAliasImpl( override fun getChild(slot: Int): IrElement? = null override fun replaceChild(slot: Int, newChild: IrElement) { - // no children + throwNoSuchSlot(slot) } } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt index 77f30d64b16..ecb4036ba2b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBlock.kt @@ -39,7 +39,7 @@ class IrEmptyBlockImpl(startOffset: Int, endOffset: Int, type: KotlinType, overr override fun getChild(slot: Int): IrElement? = null override fun replaceChild(slot: Int, newChild: IrElement) { - // no children + throwNoSuchSlot(slot) } override fun accept(visitor: IrElementVisitor, data: D): R { @@ -79,12 +79,12 @@ class IrBlockImpl(startOffset: Int, endOffset: Int, type: KotlinType, override v statements.getOrNull(slot) override fun replaceChild(slot: Int, newChild: IrElement) { + if (slot < 0 || slot >= statements.size) throwNoSuchSlot(slot) + newChild.assertDetached() - if (0 <= slot && slot < statements.size) { - statements[slot].detach() - statements[slot] = newChild.assertCast() - newChild.setTreeLocation(this, slot) - } + statements[slot].detach() + statements[slot] = newChild.assertCast() + newChild.setTreeLocation(this, slot) } override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt index 4eee278d3e3..59a0e9492dd 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrBody.kt @@ -63,6 +63,7 @@ class IrExpressionBodyImpl(startOffset: Int, endOffset: Int) : IrElementBase(sta override fun replaceChild(slot: Int, newChild: IrElement) { when (slot) { CHILD_EXPRESSION_SLOT -> expression = newChild.assertCast() + else -> throwNoSuchSlot(slot) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt index 51b6aac8079..d61c6cb1f6d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrErrorExpression.kt @@ -82,6 +82,8 @@ class IrErrorCallExpressionImpl( arguments.getOrNull(slot) override fun replaceChild(slot: Int, newChild: IrElement) { + if (slot < 0 || slot >= arguments.size) throwNoSuchSlot(slot) + newChild.assertDetached() arguments[slot].detach() arguments[slot] = newChild.assertCast() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt index 3fca9ca6725..c383af3286f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrGetClass.kt @@ -49,6 +49,7 @@ class IrGetClassImpl(startOffset: Int, endOffset: Int, type: KotlinType) : IrExp override fun replaceChild(slot: Int, newChild: IrElement) { when (slot) { CHILD_EXPRESSION_SLOT -> argument = newChild.assertCast() + else -> throwNoSuchSlot(slot) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLoop.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLoop.kt index d39cbeeaa19..f8f7e596adc 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLoop.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLoop.kt @@ -68,6 +68,7 @@ abstract class IrLoopBase( when (slot) { LOOP_BODY_SLOT -> body = newChild.assertCast() LOOP_CONDITION_SLOT -> condition = newChild.assertCast() + else -> throwNoSuchSlot(slot) } } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPrimitiveCall.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPrimitiveCall.kt index 7a2ec8ddaf3..013660cdf14 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPrimitiveCall.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPrimitiveCall.kt @@ -62,7 +62,7 @@ class IrNullaryPrimitiveImpl constructor( override fun getChild(slot: Int): IrElement? = null override fun replaceChild(slot: Int, newChild: IrElement) { - // no children + throwNoSuchSlot(slot) } override fun acceptChildren(visitor: IrElementVisitor, data: D) { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt index cfe1b48bad3..91764279050 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrStringConcatenation.kt @@ -43,15 +43,12 @@ class IrStringConcatenationImpl( arguments.getOrNull(slot) override fun replaceChild(slot: Int, newChild: IrElement) { + if (slot < 0 || slot >= arguments.size) throwNoSuchSlot(slot) + newChild.assertDetached() - if (0 <= slot && slot < arguments.size) { - arguments[slot].detach() - arguments[slot] = newChild.assertCast() - newChild.setTreeLocation(this, slot) - } - else { - throwNoSuchSlot(slot) - } + arguments[slot].detach() + arguments[slot] = newChild.assertCast() + newChild.setTreeLocation(this, slot) } override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTryCatch.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTryCatch.kt index ac3cbc294fd..dad0970a1d3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTryCatch.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrTryCatch.kt @@ -94,10 +94,14 @@ class IrTryCatchImpl( putCatchClauseElement(catchClauseResults, newChild, slot) slot == FINALLY_EXPRESSION_SLOT -> finallyExpression = newChild.assertCast() + else -> + throwNoSuchSlot(slot) } } private inline fun putCatchClauseElement(list: MutableList, newChild: IrElement, slot: Int) { + if (slot < 0 || slot >= list.size) throwNoSuchSlot(slot) + list[slot].detach() list[slot] = newChild.assertCast() newChild.setTreeLocation(this, slot) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt index 5471db3b31a..ef4284232c8 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrVararg.kt @@ -51,6 +51,7 @@ class IrVarargImpl( override fun replaceChild(slot: Int, newChild: IrElement) { if (slot < 0 || slot >= elements.size) throwNoSuchSlot(slot) + newChild.assertDetached() elements[slot].detach() elements[slot] = newChild.assertCast() @@ -94,6 +95,7 @@ class IrSpreadElementImpl( override fun replaceChild(slot: Int, newChild: IrElement) { when (slot) { CHILD_EXPRESSION_SLOT -> expression = newChild.assertCast() + else -> throwNoSuchSlot(slot) } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt index 87162f1fc83..e0472bd94c7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrWhen.kt @@ -17,10 +17,8 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.* -import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.types.KotlinType -import org.jetbrains.kotlin.utils.SmartList import java.util.* interface IrWhen : IrExpression { @@ -74,6 +72,8 @@ class IrWhenImpl( branchParts[slot] = newChild.assertCast() newChild.setTreeLocation(this, slot) } + else -> + throwNoSuchSlot(slot) } }