From 44e14c0a1cbe8972abf406d436ee799873970fd0 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Mon, 11 Feb 2013 17:07:10 +0400 Subject: [PATCH] Extracted super class. --- .../jet/codegen/ExpressionCodegen.java | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 4cf71afd19d..a39d1e79dc9 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -795,16 +795,11 @@ public class ExpressionCodegen extends JetVisitor implem } } - private class ForInRangeLiteralLoopGenerator extends AbstractForLoopGenerator { - private final RangeCodegenUtil.BinaryCall rangeCall; + private abstract class AbstractForInRangeLoopGenerator extends AbstractForLoopGenerator { protected int endVar; - private ForInRangeLiteralLoopGenerator( - @NotNull JetForExpression forExpression, - @NotNull RangeCodegenUtil.BinaryCall rangeCall - ) { + private AbstractForInRangeLoopGenerator(@NotNull JetForExpression forExpression) { super(forExpression); - this.rangeCall = rangeCall; } @Override @@ -815,13 +810,7 @@ public class ExpressionCodegen extends JetVisitor implem storeRangeStartAndEnd(); } - protected void storeRangeStartAndEnd() { - gen(rangeCall.left, asmElementType); - v.store(loopParameterVar, asmElementType); - - gen(rangeCall.right, asmElementType); - v.store(endVar, asmElementType); - } + protected abstract void storeRangeStartAndEnd(); @Override public void conditionAndJump(@NotNull Label loopExit) { @@ -899,6 +888,27 @@ public class ExpressionCodegen extends JetVisitor implem } } + private class ForInRangeLiteralLoopGenerator extends AbstractForInRangeLoopGenerator { + private final RangeCodegenUtil.BinaryCall rangeCall; + + private ForInRangeLiteralLoopGenerator( + @NotNull JetForExpression forExpression, + @NotNull RangeCodegenUtil.BinaryCall rangeCall + ) { + super(forExpression); + this.rangeCall = rangeCall; + } + + @Override + protected void storeRangeStartAndEnd() { + gen(rangeCall.left, asmElementType); + v.store(loopParameterVar, asmElementType); + + gen(rangeCall.right, asmElementType); + v.store(endVar, asmElementType); + } + } + private class ForInIntRangeInstanceLoopGenerator extends AbstractForLoopGenerator { private int endVar;