diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index f6947e018ba..244122199e0 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -2107,7 +2107,10 @@ public class ExpressionCodegen extends JetVisitor { } public void generateNewArray(JetCallExpression expression, JetType arrayType) { - List args = expression.getValueArguments(); + List args = new ArrayList(); + for(ValueArgument va : expression.getValueArguments()) + args.add(va.getArgumentExpression()); + args.addAll(expression.getFunctionLiteralArguments()); boolean isArray = state.getStandardLibrary().getArray().equals(arrayType.getConstructor().getDeclarationDescriptor()); if(isArray) { @@ -2125,17 +2128,17 @@ public class ExpressionCodegen extends JetVisitor { JetType elementType = typeMapper.getGenericsElementType(arrayType); if(elementType != null) { generateTypeInfo(elementType, null); - gen(args.get(0).getArgumentExpression(), Type.INT_TYPE); + gen(args.get(0), Type.INT_TYPE); v.invokevirtual("jet/TypeInfo", "newArray", "(I)[Ljava/lang/Object;"); } else { - gen(args.get(0).getArgumentExpression(), Type.INT_TYPE); + gen(args.get(0), Type.INT_TYPE); v.newarray(boxType(asmType(arrayType.getArguments().get(0).getType()))); } } else { Type type = typeMapper.mapType(arrayType, OwnerKind.IMPLEMENTATION); - gen(args.get(0).getArgumentExpression(), Type.INT_TYPE); + gen(args.get(0), Type.INT_TYPE); v.newarray(correctElementType(type)); } @@ -2150,7 +2153,7 @@ public class ExpressionCodegen extends JetVisitor { v.iconst(0); v.store(indexIndex, Type.INT_TYPE); - gen(args.get(1).getArgumentExpression(), TYPE_FUNCTION1); + gen(args.get(1), TYPE_FUNCTION1); Label begin = new Label(); Label end = new Label(); diff --git a/compiler/testData/codegen/regressions/kt945.jet b/compiler/testData/codegen/regressions/kt945.jet new file mode 100644 index 00000000000..c2c5a8617ae --- /dev/null +++ b/compiler/testData/codegen/regressions/kt945.jet @@ -0,0 +1,9 @@ +fun box() : String { + val data = Array>(3) { Array(4, {false}) } + for(d in data) { + if(d.size != 4) return "fail" + System.out?.println(d) + } + + return "OK" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/PrimitiveTypesTest.java b/compiler/tests/org/jetbrains/jet/codegen/PrimitiveTypesTest.java index 9f5c8fe928e..77eeccc0997 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/PrimitiveTypesTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/PrimitiveTypesTest.java @@ -383,4 +383,8 @@ public class PrimitiveTypesTest extends CodegenTestCase { public void testKt944 () { blackBoxFile("regressions/kt944.kt"); } + + public void testKt945 () { + blackBoxFile("regressions/kt945.jet"); + } }