Replace BoundedValue objects in 'indices' with SimpleBoundedValue

This commit is contained in:
Dmitry Petrov
2017-12-05 16:31:30 +03:00
parent 209ba89a49
commit 75315a4edb
3 changed files with 30 additions and 30 deletions
@@ -25,21 +25,21 @@ import org.jetbrains.kotlin.psi.KtForExpression
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
class ArrayIndicesRangeValue(rangeCall: ResolvedCall<out CallableDescriptor>): PrimitiveNumberRangeIntrinsicRangeValue(rangeCall) { class ArrayIndicesRangeValue(rangeCall: ResolvedCall<out CallableDescriptor>): PrimitiveNumberRangeIntrinsicRangeValue(rangeCall) {
private val expectedReceiverType: KotlinType = ExpressionCodegen.getExpectedReceiverType(rangeCall) private val expectedReceiverType: KotlinType = ExpressionCodegen.getExpectedReceiverType(rangeCall)
override fun getBoundedValue(codegen: ExpressionCodegen) = override fun getBoundedValue(codegen: ExpressionCodegen) =
object : AbstractBoundedValue(codegen, rangeCall, isHighInclusive = false) { SimpleBoundedValue(
override fun putHighLow(v: InstructionAdapter, type: Type) { codegen, rangeCall,
codegen.generateCallReceiver(rangeCall).put(codegen.asmType(expectedReceiverType), v) lowBound = StackValue.constant(0, asmElementType),
v.arraylength() isLowInclusive = true,
StackValue.coerce(Type.INT_TYPE, type, v) highBound = StackValue.operation(Type.INT_TYPE) { v ->
codegen.generateCallReceiver(rangeCall).put(codegen.asmType(expectedReceiverType), v)
StackValue.constant(0, asmElementType).put(type, v) v.arraylength()
} },
} isHighInclusive = false
)
override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) = override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) =
ForInArrayIndicesRangeLoopGenerator(codegen, forExpression, rangeCall) ForInArrayIndicesRangeLoopGenerator(codegen, forExpression, rangeCall)
@@ -25,21 +25,21 @@ import org.jetbrains.kotlin.psi.KtForExpression
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
class CharSequenceIndicesRangeValue(rangeCall: ResolvedCall<out CallableDescriptor>): PrimitiveNumberRangeIntrinsicRangeValue(rangeCall) { class CharSequenceIndicesRangeValue(rangeCall: ResolvedCall<out CallableDescriptor>): PrimitiveNumberRangeIntrinsicRangeValue(rangeCall) {
private val expectedReceiverType: KotlinType = ExpressionCodegen.getExpectedReceiverType(rangeCall) private val expectedReceiverType: KotlinType = ExpressionCodegen.getExpectedReceiverType(rangeCall)
override fun getBoundedValue(codegen: ExpressionCodegen) = override fun getBoundedValue(codegen: ExpressionCodegen) =
object : AbstractBoundedValue(codegen, rangeCall, isHighInclusive = false) { SimpleBoundedValue(
override fun putHighLow(v: InstructionAdapter, type: Type) { codegen, rangeCall,
codegen.generateCallReceiver(rangeCall).put(codegen.asmType(expectedReceiverType), v) lowBound = StackValue.constant(0, asmElementType),
v.invokeinterface("java/lang/CharSequence", "length", "()I") isLowInclusive = true,
StackValue.coerce(Type.INT_TYPE, type, v) highBound = StackValue.operation(Type.INT_TYPE) { v ->
codegen.generateCallReceiver(rangeCall).put(codegen.asmType(expectedReceiverType), v)
StackValue.constant(0, asmElementType).put(type, v) v.invokeinterface("java/lang/CharSequence", "length", "()I")
} },
} isHighInclusive = false
)
override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) = override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) =
ForInCharSequenceIndicesRangeLoopGenerator(codegen, forExpression, rangeCall) ForInCharSequenceIndicesRangeLoopGenerator(codegen, forExpression, rangeCall)
@@ -25,21 +25,21 @@ import org.jetbrains.kotlin.psi.KtForExpression
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
class CollectionIndicesRangeValue(rangeCall: ResolvedCall<out CallableDescriptor>): PrimitiveNumberRangeIntrinsicRangeValue(rangeCall) { class CollectionIndicesRangeValue(rangeCall: ResolvedCall<out CallableDescriptor>): PrimitiveNumberRangeIntrinsicRangeValue(rangeCall) {
private val expectedReceiverType: KotlinType = ExpressionCodegen.getExpectedReceiverType(rangeCall) private val expectedReceiverType: KotlinType = ExpressionCodegen.getExpectedReceiverType(rangeCall)
override fun getBoundedValue(codegen: ExpressionCodegen) = override fun getBoundedValue(codegen: ExpressionCodegen) =
object : AbstractBoundedValue(codegen, rangeCall, isHighInclusive = false) { SimpleBoundedValue(
override fun putHighLow(v: InstructionAdapter, type: Type) { codegen, rangeCall,
codegen.generateCallReceiver(rangeCall).put(codegen.asmType(expectedReceiverType), v) lowBound = StackValue.constant(0, asmElementType),
v.invokeinterface("java/util/Collection", "size", "()I") isLowInclusive = true,
StackValue.coerce(Type.INT_TYPE, type, v) highBound = StackValue.operation(Type.INT_TYPE) { v ->
codegen.generateCallReceiver(rangeCall).put(codegen.asmType(expectedReceiverType), v)
StackValue.constant(0, asmElementType).put(type, v) v.invokeinterface("java/util/Collection", "size", "()I")
} },
} isHighInclusive = false
)
override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) = override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) =
ForInCollectionIndicesRangeLoopGenerator(codegen, forExpression, rangeCall) ForInCollectionIndicesRangeLoopGenerator(codegen, forExpression, rangeCall)