diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 39354a6fb57..1ff7a74c41c 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -659,6 +659,18 @@ public class ExpressionCodegen extends JetVisitor implem task.run(); } } + + // This method consumes range/progression from stack + // The result is stored to local variable + protected void generateRangeOrProgressionProperty(Type loopRangeType, String getterName, Type elementType, int varToStore) { + JvmPrimitiveType primitiveType = JvmPrimitiveType.getByAsmType(elementType); + assert primitiveType != null : elementType; + Type asmWrapperType = primitiveType.getWrapper().getAsmType(); + + v.invokevirtual(loopRangeType.getInternalName(), getterName, "()" + asmWrapperType.getDescriptor()); + StackValue.coerce(asmWrapperType, elementType, v); + v.store(varToStore, elementType); + } } private class IteratorForLoopGenerator extends AbstractForLoopGenerator { @@ -922,17 +934,8 @@ public class ExpressionCodegen extends JetVisitor implem gen(forExpression.getLoopRange(), asmLoopRangeType); v.dup(); - JvmPrimitiveType primitiveType = JvmPrimitiveType.getByAsmType(asmElementType); - assert primitiveType != null : asmElementType; - Type asmWrapperType = primitiveType.getWrapper().getAsmType(); - - v.invokevirtual(asmLoopRangeType.getInternalName(), "getStart", "()" + asmWrapperType.getDescriptor()); - StackValue.coerce(asmWrapperType, asmElementType, v); - v.store(loopParameterVar, asmElementType); - - v.invokevirtual(asmLoopRangeType.getInternalName(), "getEnd", "()" + asmWrapperType.getDescriptor()); - StackValue.coerce(asmWrapperType, asmElementType, v); - v.store(endVar, asmElementType); + generateRangeOrProgressionProperty(asmLoopRangeType, "getStart", asmElementType, loopParameterVar); + generateRangeOrProgressionProperty(asmLoopRangeType, "getEnd", asmElementType, endVar); } }