KT-729 Need to support arrays as varargs: front-end checks done
#KT-729 In progress
This commit is contained in:
@@ -79,9 +79,9 @@ public abstract class AnnotationCodegen {
|
||||
for (Map.Entry<ValueParameterDescriptor, ResolvedValueArgument> entry : resolvedCall.getValueArguments().entrySet()) {
|
||||
ResolvedValueArgument valueArgument = entry.getValue();
|
||||
if (!(valueArgument instanceof DefaultValueArgument)) {
|
||||
List<JetExpression> valueArguments = valueArgument.getArgumentExpressions();
|
||||
List<ValueArgument> valueArguments = valueArgument.getArguments();
|
||||
assert valueArguments.size() == 1 : "Number of assertions on " + resolvedCall.getResultingDescriptor() + " = " + valueArguments.size(); // todo
|
||||
CompileTimeConstant<?> compileTimeConstant = bindingContext.get(BindingContext.COMPILE_TIME_VALUE, valueArguments.get(0));
|
||||
CompileTimeConstant<?> compileTimeConstant = bindingContext.get(BindingContext.COMPILE_TIME_VALUE, valueArguments.get(0).getArgumentExpression());
|
||||
assert compileTimeConstant != null;
|
||||
|
||||
Object value = compileTimeConstant.getValue();
|
||||
|
||||
@@ -1495,7 +1495,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
|
||||
ResolvedValueArgument resolvedValueArgument = valueArguments.get(valueParameterDescriptor.getIndex());
|
||||
if(resolvedValueArgument instanceof ExpressionValueArgument) {
|
||||
ExpressionValueArgument valueArgument = (ExpressionValueArgument) resolvedValueArgument;
|
||||
gen(valueArgument.getExpression(), valueParameterTypes.get(index));
|
||||
gen(valueArgument.getValueArgument().getArgumentExpression(), valueParameterTypes.get(index));
|
||||
}
|
||||
else if(resolvedValueArgument instanceof DefaultValueArgument) {
|
||||
Type type = valueParameterTypes.get(index);
|
||||
@@ -1522,14 +1522,14 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
|
||||
Type type = asmType(outType);
|
||||
assert type.getSort() == Type.ARRAY;
|
||||
Type elementType = correctElementType(type);
|
||||
int size = valueArgument.getArgumentExpressions().size();
|
||||
int size = valueArgument.getArguments().size();
|
||||
|
||||
v.iconst(valueArgument.getArgumentExpressions().size());
|
||||
v.iconst(valueArgument.getArguments().size());
|
||||
v.newarray(elementType);
|
||||
for(int i = 0; i != size; ++i) {
|
||||
v.dup();
|
||||
v.iconst(i);
|
||||
gen(valueArgument.getArgumentExpressions().get(i), elementType);
|
||||
gen(valueArgument.getArguments().get(i).getArgumentExpression(), elementType);
|
||||
StackValue.arrayElement(elementType, false).store(v);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user