From 75315a4edb5b36816632f8a600f31b76be7abbc3 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Tue, 5 Dec 2017 16:31:30 +0300 Subject: [PATCH] Replace BoundedValue objects in 'indices' with SimpleBoundedValue --- .../codegen/range/ArrayIndicesRangeValue.kt | 20 +++++++++---------- .../range/CharSequenceIndicesRangeValue.kt | 20 +++++++++---------- .../range/CollectionIndicesRangeValue.kt | 20 +++++++++---------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/ArrayIndicesRangeValue.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/ArrayIndicesRangeValue.kt index 75075b9af26..a35b45bcc78 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/ArrayIndicesRangeValue.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/ArrayIndicesRangeValue.kt @@ -25,21 +25,21 @@ import org.jetbrains.kotlin.psi.KtForExpression import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.org.objectweb.asm.Type -import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter class ArrayIndicesRangeValue(rangeCall: ResolvedCall): PrimitiveNumberRangeIntrinsicRangeValue(rangeCall) { private val expectedReceiverType: KotlinType = ExpressionCodegen.getExpectedReceiverType(rangeCall) override fun getBoundedValue(codegen: ExpressionCodegen) = - object : AbstractBoundedValue(codegen, rangeCall, isHighInclusive = false) { - override fun putHighLow(v: InstructionAdapter, type: Type) { - codegen.generateCallReceiver(rangeCall).put(codegen.asmType(expectedReceiverType), v) - v.arraylength() - StackValue.coerce(Type.INT_TYPE, type, v) - - StackValue.constant(0, asmElementType).put(type, v) - } - } + SimpleBoundedValue( + codegen, rangeCall, + lowBound = StackValue.constant(0, asmElementType), + isLowInclusive = true, + highBound = StackValue.operation(Type.INT_TYPE) { v -> + codegen.generateCallReceiver(rangeCall).put(codegen.asmType(expectedReceiverType), v) + v.arraylength() + }, + isHighInclusive = false + ) override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) = ForInArrayIndicesRangeLoopGenerator(codegen, forExpression, rangeCall) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/CharSequenceIndicesRangeValue.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/CharSequenceIndicesRangeValue.kt index 10d72245643..25bcbcc88e4 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/CharSequenceIndicesRangeValue.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/CharSequenceIndicesRangeValue.kt @@ -25,21 +25,21 @@ import org.jetbrains.kotlin.psi.KtForExpression import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.org.objectweb.asm.Type -import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter class CharSequenceIndicesRangeValue(rangeCall: ResolvedCall): PrimitiveNumberRangeIntrinsicRangeValue(rangeCall) { private val expectedReceiverType: KotlinType = ExpressionCodegen.getExpectedReceiverType(rangeCall) override fun getBoundedValue(codegen: ExpressionCodegen) = - object : AbstractBoundedValue(codegen, rangeCall, isHighInclusive = false) { - override fun putHighLow(v: InstructionAdapter, type: Type) { - codegen.generateCallReceiver(rangeCall).put(codegen.asmType(expectedReceiverType), v) - v.invokeinterface("java/lang/CharSequence", "length", "()I") - StackValue.coerce(Type.INT_TYPE, type, v) - - StackValue.constant(0, asmElementType).put(type, v) - } - } + SimpleBoundedValue( + codegen, rangeCall, + lowBound = StackValue.constant(0, asmElementType), + isLowInclusive = true, + highBound = StackValue.operation(Type.INT_TYPE) { v -> + codegen.generateCallReceiver(rangeCall).put(codegen.asmType(expectedReceiverType), v) + v.invokeinterface("java/lang/CharSequence", "length", "()I") + }, + isHighInclusive = false + ) override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) = ForInCharSequenceIndicesRangeLoopGenerator(codegen, forExpression, rangeCall) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/CollectionIndicesRangeValue.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/CollectionIndicesRangeValue.kt index 8d1eca82659..7b03a628f54 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/CollectionIndicesRangeValue.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/CollectionIndicesRangeValue.kt @@ -25,21 +25,21 @@ import org.jetbrains.kotlin.psi.KtForExpression import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.org.objectweb.asm.Type -import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter class CollectionIndicesRangeValue(rangeCall: ResolvedCall): PrimitiveNumberRangeIntrinsicRangeValue(rangeCall) { private val expectedReceiverType: KotlinType = ExpressionCodegen.getExpectedReceiverType(rangeCall) override fun getBoundedValue(codegen: ExpressionCodegen) = - object : AbstractBoundedValue(codegen, rangeCall, isHighInclusive = false) { - override fun putHighLow(v: InstructionAdapter, type: Type) { - codegen.generateCallReceiver(rangeCall).put(codegen.asmType(expectedReceiverType), v) - v.invokeinterface("java/util/Collection", "size", "()I") - StackValue.coerce(Type.INT_TYPE, type, v) - - StackValue.constant(0, asmElementType).put(type, v) - } - } + SimpleBoundedValue( + codegen, rangeCall, + lowBound = StackValue.constant(0, asmElementType), + isLowInclusive = true, + highBound = StackValue.operation(Type.INT_TYPE) { v -> + codegen.generateCallReceiver(rangeCall).put(codegen.asmType(expectedReceiverType), v) + v.invokeinterface("java/util/Collection", "size", "()I") + }, + isHighInclusive = false + ) override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) = ForInCollectionIndicesRangeLoopGenerator(codegen, forExpression, rangeCall)