KT-945 functional parameters used properly on array creation
This commit is contained in:
@@ -2107,7 +2107,10 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void generateNewArray(JetCallExpression expression, JetType arrayType) {
|
public void generateNewArray(JetCallExpression expression, JetType arrayType) {
|
||||||
List<? extends ValueArgument> args = expression.getValueArguments();
|
List<JetExpression> args = new ArrayList<JetExpression>();
|
||||||
|
for(ValueArgument va : expression.getValueArguments())
|
||||||
|
args.add(va.getArgumentExpression());
|
||||||
|
args.addAll(expression.getFunctionLiteralArguments());
|
||||||
|
|
||||||
boolean isArray = state.getStandardLibrary().getArray().equals(arrayType.getConstructor().getDeclarationDescriptor());
|
boolean isArray = state.getStandardLibrary().getArray().equals(arrayType.getConstructor().getDeclarationDescriptor());
|
||||||
if(isArray) {
|
if(isArray) {
|
||||||
@@ -2125,17 +2128,17 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
|
|||||||
JetType elementType = typeMapper.getGenericsElementType(arrayType);
|
JetType elementType = typeMapper.getGenericsElementType(arrayType);
|
||||||
if(elementType != null) {
|
if(elementType != null) {
|
||||||
generateTypeInfo(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;");
|
v.invokevirtual("jet/TypeInfo", "newArray", "(I)[Ljava/lang/Object;");
|
||||||
}
|
}
|
||||||
else {
|
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())));
|
v.newarray(boxType(asmType(arrayType.getArguments().get(0).getType())));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Type type = typeMapper.mapType(arrayType, OwnerKind.IMPLEMENTATION);
|
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));
|
v.newarray(correctElementType(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2150,7 +2153,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
|
|||||||
v.iconst(0);
|
v.iconst(0);
|
||||||
v.store(indexIndex, Type.INT_TYPE);
|
v.store(indexIndex, Type.INT_TYPE);
|
||||||
|
|
||||||
gen(args.get(1).getArgumentExpression(), TYPE_FUNCTION1);
|
gen(args.get(1), TYPE_FUNCTION1);
|
||||||
|
|
||||||
Label begin = new Label();
|
Label begin = new Label();
|
||||||
Label end = new Label();
|
Label end = new Label();
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
fun box() : String {
|
||||||
|
val data = Array<Array<Boolean>>(3) { Array<Boolean>(4, {false}) }
|
||||||
|
for(d in data) {
|
||||||
|
if(d.size != 4) return "fail"
|
||||||
|
System.out?.println(d)
|
||||||
|
}
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
@@ -383,4 +383,8 @@ public class PrimitiveTypesTest extends CodegenTestCase {
|
|||||||
public void testKt944 () {
|
public void testKt944 () {
|
||||||
blackBoxFile("regressions/kt944.kt");
|
blackBoxFile("regressions/kt944.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testKt945 () {
|
||||||
|
blackBoxFile("regressions/kt945.jet");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user