Push arguments refactoring

This commit is contained in:
Mikhael Bogdanov
2014-02-24 17:54:49 +04:00
parent 2d9674089c
commit c8302fdf9c
2 changed files with 11 additions and 18 deletions
@@ -2325,7 +2325,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
return false;
}
private int pushMethodArguments(@NotNull ResolvedCall resolvedCall, List<Type> valueParameterTypes, CallGenerator callGenerator) {
public int pushMethodArguments(@NotNull ResolvedCall resolvedCall, List<Type> valueParameterTypes, CallGenerator callGenerator) {
return pushMethodArguments(resolvedCall, valueParameterTypes, false, callGenerator);
}
@@ -2460,22 +2460,6 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
}
}
public int pushMethodArguments(JetCallElement expression, List<Type> valueParameterTypes) {
ResolvedCall<? extends CallableDescriptor> resolvedCall =
bindingContext.get(BindingContext.RESOLVED_CALL, expression.getCalleeExpression());
if (resolvedCall != null) {
return pushMethodArguments(resolvedCall, valueParameterTypes, null);
}
else {
List<? extends ValueArgument> args = expression.getValueArguments();
for (int i = 0, argsSize = args.size(); i < argsSize; i++) {
ValueArgument arg = args.get(i);
gen(arg.getArgumentExpression(), valueParameterTypes.get(i));
}
return 0;
}
}
@NotNull
public Type expressionType(JetExpression expr) {
return asmTypeOrVoid(bindingContext.get(EXPRESSION_TYPE, expr));
@@ -23,8 +23,11 @@ import org.jetbrains.asm4.Type;
import org.jetbrains.asm4.commons.InstructionAdapter;
import org.jetbrains.jet.codegen.ExpressionCodegen;
import org.jetbrains.jet.codegen.StackValue;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
import org.jetbrains.jet.lang.psi.JetCallExpression;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
import java.util.Arrays;
import java.util.List;
@@ -43,7 +46,13 @@ public class StupidSync extends IntrinsicMethod {
@Nullable List<JetExpression> arguments,
StackValue receiver
) {
codegen.pushMethodArguments((JetCallExpression) element, Arrays.asList(OBJECT_TYPE, FUNCTION0_TYPE));
assert element != null : "Element should not be null";
ResolvedCall<? extends CallableDescriptor> resolvedCall =
codegen.getBindingContext().get(BindingContext.RESOLVED_CALL, ((JetCallExpression) element).getCalleeExpression());
assert resolvedCall != null : "Resolved call for " + element.getText() + " should be not null";
codegen.pushMethodArguments(resolvedCall, Arrays.asList(OBJECT_TYPE, FUNCTION0_TYPE), null);
v.invokestatic("kotlin/jvm/internal/Intrinsics", "stupidSync", Type.getMethodDescriptor(OBJECT_TYPE, OBJECT_TYPE, FUNCTION0_TYPE));
return OBJECT_TYPE;
}