From 285912f5560c8370c9c367bdb112130a5d2865e2 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 19 Apr 2018 17:24:12 +0200 Subject: [PATCH] Minor, add helper StackValue.constant(int) --- .../src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java | 2 +- .../src/org/jetbrains/kotlin/codegen/PropertyCodegen.java | 2 +- .../backend/src/org/jetbrains/kotlin/codegen/StackValue.java | 5 +++++ .../codegen/range/forLoop/ArrayWithIndexForLoopGenerator.kt | 3 +-- .../range/forLoop/CharSequenceWithIndexForLoopGenerator.kt | 3 +-- .../range/forLoop/IteratorWithIndexForLoopGenerator.kt | 3 +-- .../kotlin/backend/jvm/codegen/ExpressionCodegen.kt | 2 +- 7 files changed, 11 insertions(+), 9 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index aeb906ebfe9..74bad09c0f2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -2937,7 +2937,7 @@ public class ExpressionCodegen extends KtVisitor impleme v.dup(); StackValue rightSide = gen(arguments.get(i).getArgumentExpression()); StackValue - .arrayElement(elementType, elementKotlinType, StackValue.onStack(type, outType), StackValue.constant(i, Type.INT_TYPE)) + .arrayElement(elementType, elementKotlinType, StackValue.onStack(type, outType), StackValue.constant(i)) .store(rightSide, v); } return Unit.INSTANCE; diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java index 30ae78f00da..a1041001318 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java @@ -603,7 +603,7 @@ public class PropertyCodegen { StackValue.Field array = StackValue.field( Type.getType("[" + K_PROPERTY_TYPE), owner, JvmAbi.DELEGATED_PROPERTIES_ARRAY_NAME, true, StackValue.none() ); - return StackValue.arrayElement(K_PROPERTY_TYPE, null, array, StackValue.constant(index, Type.INT_TYPE)); + return StackValue.arrayElement(K_PROPERTY_TYPE, null, array, StackValue.constant(index)); } private static class DelegatedPropertyAccessorStrategy extends FunctionGenerationStrategy.CodegenBased { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java index 196328b25ae..99063f13685 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/StackValue.java @@ -213,6 +213,11 @@ public abstract class StackValue { } } + @NotNull + public static StackValue constant(int value) { + return constant(value, Type.INT_TYPE); + } + @NotNull public static StackValue constant(@Nullable Object value, @NotNull Type type) { return constant(value, type, null); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ArrayWithIndexForLoopGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ArrayWithIndexForLoopGenerator.kt index fd804a9a127..72257352cda 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ArrayWithIndexForLoopGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ArrayWithIndexForLoopGenerator.kt @@ -47,8 +47,7 @@ class ArrayWithIndexForLoopGenerator( v.arraylength() v.store(arrayLengthVar, Type.INT_TYPE) - StackValue.local(indexVar, indexType) - .store(StackValue.constant(0, Type.INT_TYPE), v) + StackValue.local(indexVar, indexType).store(StackValue.constant(0), v) } override fun checkPreCondition(loopExit: Label) { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/CharSequenceWithIndexForLoopGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/CharSequenceWithIndexForLoopGenerator.kt index 7f2152d4030..0f0e084fa7b 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/CharSequenceWithIndexForLoopGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/CharSequenceWithIndexForLoopGenerator.kt @@ -44,8 +44,7 @@ class CharSequenceWithIndexForLoopGenerator( indexVar = indexLoopComponent?.parameterVar ?: createLoopTempVariable(Type.INT_TYPE) indexType = indexLoopComponent?.parameterType ?: Type.INT_TYPE - StackValue.local(indexVar, indexType) - .store(StackValue.constant(0, Type.INT_TYPE), v) + StackValue.local(indexVar, indexType).store(StackValue.constant(0), v) } private fun evalCharSeqLengthOnStack() { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/IteratorWithIndexForLoopGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/IteratorWithIndexForLoopGenerator.kt index 4fa2effe1f2..9a210704595 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/IteratorWithIndexForLoopGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/IteratorWithIndexForLoopGenerator.kt @@ -34,8 +34,7 @@ class IteratorWithIndexForLoopGenerator( indexVar = indexLoopComponent?.parameterVar ?: createLoopTempVariable(Type.INT_TYPE) indexType = indexLoopComponent?.parameterType ?: Type.INT_TYPE - StackValue.local(indexVar, indexType) - .store(StackValue.constant(0, Type.INT_TYPE), v) + StackValue.local(indexVar, indexType).store(StackValue.constant(0), v) iteratorVar = createLoopTempVariable(asmTypeForIterator) codegen.generateCallReceiver(rangeCall).put(iteratorOwnerType, v) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index 278750c0e23..4336313602f 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -507,7 +507,7 @@ class ExpressionCodegen( val elementKotlinType = classCodegen.context.builtIns.getArrayElementType(outType.toKotlinType()!!) for ((i, element) in expression.elements.withIndex()) { mv.dup() - StackValue.constant(i, Type.INT_TYPE).put(Type.INT_TYPE, mv) + StackValue.constant(i).put(Type.INT_TYPE, mv) val rightSide = gen(element, elementType, data) StackValue .arrayElement(