Minor cleanup in ExpressionCodegen#pushMethodArguments
This commit is contained in:
@@ -2341,47 +2341,44 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
|||||||
}
|
}
|
||||||
List<ValueParameterDescriptor> valueParameters = fd.getValueParameters();
|
List<ValueParameterDescriptor> valueParameters = fd.getValueParameters();
|
||||||
|
|
||||||
if (valueParameters.size() != valueArguments.size()) {
|
int n = valueParameters.size();
|
||||||
throw new IllegalStateException("Parameters and arguments size mismatch: " + valueParameters.size() + " != " + valueArguments.size());
|
if (n != valueArguments.size()) {
|
||||||
|
throw new IllegalStateException("Parameters and arguments size mismatch: " + n + " != " + valueArguments.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
int mask = 0;
|
int mask = 0;
|
||||||
|
|
||||||
for (Iterator<ValueParameterDescriptor> iterator = valueParameters.iterator(); iterator.hasNext(); ) {
|
for (int i = 0; i < n; i++) {
|
||||||
ValueParameterDescriptor valueParameter = iterator.next();
|
if (skipLast && i == n - 1) break;
|
||||||
if (skipLast && !iterator.hasNext()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ResolvedValueArgument resolvedValueArgument = valueArguments.get(valueParameter.getIndex());
|
ValueParameterDescriptor valueParameter = valueParameters.get(i);
|
||||||
Type parameterType = valueParameterTypes.get(valueParameter.getIndex());
|
ResolvedValueArgument argument = valueArguments.get(i);
|
||||||
if (resolvedValueArgument instanceof ExpressionValueArgument) {
|
Type parameterType = valueParameterTypes.get(i);
|
||||||
ValueArgument valueArgument = ((ExpressionValueArgument) resolvedValueArgument).getValueArgument();
|
if (argument instanceof ExpressionValueArgument) {
|
||||||
|
ValueArgument valueArgument = ((ExpressionValueArgument) argument).getValueArgument();
|
||||||
assert valueArgument != null;
|
assert valueArgument != null;
|
||||||
JetExpression argumentExpression = valueArgument.getArgumentExpression();
|
JetExpression argumentExpression = valueArgument.getArgumentExpression();
|
||||||
assert argumentExpression != null : valueArgument.asElement().getText();
|
assert argumentExpression != null : valueArgument.asElement().getText();
|
||||||
|
|
||||||
callGenerator.genValueAndPut(valueParameter, argumentExpression, parameterType);
|
callGenerator.genValueAndPut(valueParameter, argumentExpression, parameterType);
|
||||||
} else if (resolvedValueArgument instanceof DefaultValueArgument) {
|
}
|
||||||
|
else if (argument instanceof DefaultValueArgument) {
|
||||||
pushDefaultValueOnStack(parameterType, v);
|
pushDefaultValueOnStack(parameterType, v);
|
||||||
mask |= (1 << valueParameter.getIndex());
|
mask |= 1 << i;
|
||||||
callGenerator.afterParameterPut(parameterType, null, valueParameter);
|
callGenerator.afterParameterPut(parameterType, null, valueParameter);
|
||||||
}
|
}
|
||||||
else if (resolvedValueArgument instanceof VarargValueArgument) {
|
else if (argument instanceof VarargValueArgument) {
|
||||||
VarargValueArgument valueArgument = (VarargValueArgument) resolvedValueArgument;
|
genVarargs((VarargValueArgument) argument, valueParameter.getType());
|
||||||
genVarargs(valueParameter, valueArgument);
|
|
||||||
callGenerator.afterParameterPut(parameterType, null, valueParameter);
|
callGenerator.afterParameterPut(parameterType, null, valueParameter);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException("Unsupported value argument: " + argument);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void genVarargs(ValueParameterDescriptor valueParameterDescriptor, VarargValueArgument valueArgument) {
|
public void genVarargs(@NotNull VarargValueArgument valueArgument, @NotNull JetType outType) {
|
||||||
JetType outType = valueParameterDescriptor.getType();
|
|
||||||
|
|
||||||
Type type = asmType(outType);
|
Type type = asmType(outType);
|
||||||
assert type.getSort() == Type.ARRAY;
|
assert type.getSort() == Type.ARRAY;
|
||||||
Type elementType = correctElementType(type);
|
Type elementType = correctElementType(type);
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import org.jetbrains.jet.codegen.StackValue;
|
|||||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.JetElement;
|
import org.jetbrains.jet.lang.psi.JetElement;
|
||||||
import org.jetbrains.jet.lang.psi.JetExpression;
|
import org.jetbrains.jet.lang.psi.JetExpression;
|
||||||
import org.jetbrains.jet.lang.resolve.bindingContextUtil.BindingContextUtilPackage;
|
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedValueArgument;
|
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedValueArgument;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.VarargValueArgument;
|
import org.jetbrains.jet.lang.resolve.calls.model.VarargValueArgument;
|
||||||
@@ -34,6 +33,8 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.jetbrains.jet.lang.resolve.bindingContextUtil.BindingContextUtilPackage.getResolvedCallWithAssert;
|
||||||
|
|
||||||
public class JavaClassArray extends IntrinsicMethod {
|
public class JavaClassArray extends IntrinsicMethod {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
@@ -45,9 +46,10 @@ public class JavaClassArray extends IntrinsicMethod {
|
|||||||
@Nullable List<JetExpression> arguments,
|
@Nullable List<JetExpression> arguments,
|
||||||
StackValue receiver
|
StackValue receiver
|
||||||
) {
|
) {
|
||||||
ResolvedCall<?> call = BindingContextUtilPackage.getResolvedCallWithAssert((JetElement) element, codegen.getBindingContext());
|
assert element != null : "Element should not be null";
|
||||||
Map.Entry<ValueParameterDescriptor, ResolvedValueArgument> next = call.getValueArguments().entrySet().iterator().next();
|
ResolvedCall<?> resolvedCall = getResolvedCallWithAssert((JetElement) element, codegen.getBindingContext());
|
||||||
codegen.genVarargs(next.getKey(), (VarargValueArgument) next.getValue());
|
Map.Entry<ValueParameterDescriptor, ResolvedValueArgument> argument = resolvedCall.getValueArguments().entrySet().iterator().next();
|
||||||
|
codegen.genVarargs((VarargValueArgument) argument.getValue(), argument.getKey().getType());
|
||||||
return returnType;
|
return returnType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user