diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 2f051cf43f8..0cd31080278 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -464,7 +464,7 @@ public class ExpressionCodegen extends JetVisitor implem CallableDescriptor rangeTo = resolvedCall.getResultingDescriptor(); if (RangeCodegenUtil.isOptimizableRangeTo(rangeTo)) { - generateForLoop(new ForInRangeLiteralLoopGenerator(forExpression, binaryCall, resolvedCall)); + generateForLoop(new ForInRangeLiteralLoopGenerator(forExpression, binaryCall)); return StackValue.none(); } } @@ -526,12 +526,14 @@ public class ExpressionCodegen extends JetVisitor implem private final List afterLoopLeaveVariableTasks = Lists.newArrayList(); protected final JetType elementType; + protected final Type asmElementType; protected int loopParameterVar; private AbstractForLoopGenerator(@NotNull JetForExpression forExpression) { this.forExpression = forExpression; this.elementType = getElementType(forExpression); + this.asmElementType = asmType(elementType); } @NotNull @@ -568,7 +570,6 @@ public class ExpressionCodegen extends JetVisitor implem assert multiParameter != null; // E tmp = tmp.next() - final Type asmElementType = asmType(elementType); loopParameterVar = createLoopTempVariable(asmElementType); } } @@ -589,7 +590,6 @@ public class ExpressionCodegen extends JetVisitor implem } private void generateMultiVariables(List entries) { - Type asmElementType = asmType(elementType); for (JetMultiDeclarationEntry variableDeclaration : entries) { final VariableDescriptor componentDescriptor = bindingContext.get(BindingContext.VARIABLE, variableDeclaration); @@ -775,7 +775,6 @@ public class ExpressionCodegen extends JetVisitor implem @Override protected void assignToLoopParameter() { Type arrayElParamType; - Type asmElementType = asmType(elementType); if (KotlinBuiltIns.getInstance().isArray(loopRangeType)) { arrayElParamType = boxType(asmElementType); } @@ -798,26 +797,19 @@ public class ExpressionCodegen extends JetVisitor implem private class ForInRangeLiteralLoopGenerator extends AbstractForLoopGenerator { private final RangeCodegenUtil.BinaryCall rangeCall; - private final ResolvedCall resolvedCall; - private Type asmElementType; private int lastVar; private ForInRangeLiteralLoopGenerator( @NotNull JetForExpression forExpression, - @NotNull RangeCodegenUtil.BinaryCall rangeCall, - ResolvedCall resolvedCall + @NotNull RangeCodegenUtil.BinaryCall rangeCall ) { super(forExpression); this.rangeCall = rangeCall; - this.resolvedCall = resolvedCall; } @Override public void beforeLoop() { super.beforeLoop(); - JetType elementType = RangeCodegenUtil.getPrimitiveRangeElementType(resolvedCall.getResultingDescriptor().getReturnType()); - assert elementType != null; - asmElementType = asmType(elementType); gen(rangeCall.left, asmElementType); v.store(loopParameterVar, asmElementType);