From fe9599d58813e04634a639a4a8ea0013b3f1c638 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 11 Dec 2014 11:17:17 +0300 Subject: [PATCH] Removed codegen of Array-constructor with lambda --- .../jet/codegen/ExpressionCodegen.java | 50 ++----------------- 1 file changed, 3 insertions(+), 47 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index e6e7e926d0c..2245a4a4f59 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -3434,60 +3434,16 @@ public class ExpressionCodegen extends JetVisitor implem } private StackValue generateNewArray(@NotNull JetCallExpression expression, @NotNull final JetType arrayType) { + assert expression.getValueArguments().size() == 1 : "Size argument expected"; - final List args = new ArrayList(); - for (ValueArgument va : expression.getValueArguments()) { - args.add(va.getArgumentExpression()); - } - - boolean isArray = KotlinBuiltIns.isArray(arrayType); - if (!isArray && args.size() != 1) { - throw new CompilationException("primitive array constructor requires one argument", null, expression); - } + final JetExpression sizeExpression = expression.getValueArguments().get(0).getArgumentExpression(); Type type = typeMapper.mapType(arrayType); return StackValue.operation(type, new Function1() { @Override public Unit invoke(InstructionAdapter v) { - gen(args.get(0), Type.INT_TYPE); + gen(sizeExpression, Type.INT_TYPE); newArrayInstruction(arrayType); - - if (args.size() == 2) { - int sizeIndex = myFrameMap.enterTemp(Type.INT_TYPE); - int indexIndex = myFrameMap.enterTemp(Type.INT_TYPE); - - v.dup(); - v.arraylength(); - v.store(sizeIndex, Type.INT_TYPE); - - v.iconst(0); - v.store(indexIndex, Type.INT_TYPE); - - gen(args.get(1), FUNCTION1_TYPE); - - Label begin = new Label(); - Label end = new Label(); - v.visitLabel(begin); - v.load(indexIndex, Type.INT_TYPE); - v.load(sizeIndex, Type.INT_TYPE); - v.ificmpge(end); - - v.dup2(); - v.load(indexIndex, Type.INT_TYPE); - v.invokestatic("java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;", false); - v.invokeinterface(FUNCTION1_TYPE.getInternalName(), "invoke", "(Ljava/lang/Object;)Ljava/lang/Object;"); - v.load(indexIndex, Type.INT_TYPE); - v.iinc(indexIndex, 1); - v.swap(); - v.astore(OBJECT_TYPE); - - v.goTo(begin); - v.visitLabel(end); - v.pop(); - - myFrameMap.leaveTemp(Type.INT_TYPE); - myFrameMap.leaveTemp(Type.INT_TYPE); - } return Unit.INSTANCE$; } });