receiver first
This commit is contained in:
@@ -557,13 +557,12 @@ public class ExpressionCodegen extends JetVisitor {
|
|||||||
if (declarationPsiElement instanceof PsiMethod) {
|
if (declarationPsiElement instanceof PsiMethod) {
|
||||||
PsiMethod psiMethod = (PsiMethod) declarationPsiElement;
|
PsiMethod psiMethod = (PsiMethod) declarationPsiElement;
|
||||||
methodDescriptor = getMethodDescriptor(psiMethod);
|
methodDescriptor = getMethodDescriptor(psiMethod);
|
||||||
pushMethodArguments(expression, methodDescriptor);
|
|
||||||
|
|
||||||
final boolean isStatic = psiMethod.hasModifierProperty(PsiModifier.STATIC);
|
final boolean isStatic = psiMethod.hasModifierProperty(PsiModifier.STATIC);
|
||||||
|
|
||||||
if (!isStatic) {
|
if (!isStatic) {
|
||||||
ensureReceiverOnStack(expression);
|
ensureReceiverOnStack(expression);
|
||||||
}
|
}
|
||||||
|
pushMethodArguments(expression, methodDescriptor);
|
||||||
|
|
||||||
v.visitMethodInsn(isStatic ? Opcodes.INVOKESTATIC : Opcodes.INVOKEVIRTUAL,
|
v.visitMethodInsn(isStatic ? Opcodes.INVOKESTATIC : Opcodes.INVOKEVIRTUAL,
|
||||||
JetTypeMapper.jvmName(psiMethod.getContainingClass()),
|
JetTypeMapper.jvmName(psiMethod.getContainingClass()),
|
||||||
@@ -572,13 +571,14 @@ public class ExpressionCodegen extends JetVisitor {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
methodDescriptor = typeMapper.mapSignature((JetFunction) declarationPsiElement);
|
methodDescriptor = typeMapper.mapSignature((JetFunction) declarationPsiElement);
|
||||||
pushMethodArguments(expression, methodDescriptor);
|
|
||||||
if (functionParent instanceof NamespaceDescriptor && declarationPsiElement instanceof JetFunction) {
|
if (functionParent instanceof NamespaceDescriptor && declarationPsiElement instanceof JetFunction) {
|
||||||
|
pushMethodArguments(expression, methodDescriptor);
|
||||||
final String owner = NamespaceCodegen.getJVMClassName(DescriptorUtil.getFQName(functionParent));
|
final String owner = NamespaceCodegen.getJVMClassName(DescriptorUtil.getFQName(functionParent));
|
||||||
v.invokestatic(owner, methodDescriptor.getName(), methodDescriptor.getDescriptor());
|
v.invokestatic(owner, methodDescriptor.getName(), methodDescriptor.getDescriptor());
|
||||||
}
|
}
|
||||||
else if (functionParent instanceof ClassDescriptor && declarationPsiElement instanceof JetFunction) {
|
else if (functionParent instanceof ClassDescriptor && declarationPsiElement instanceof JetFunction) {
|
||||||
ensureReceiverOnStack(expression);
|
ensureReceiverOnStack(expression);
|
||||||
|
pushMethodArguments(expression, methodDescriptor);
|
||||||
final String owner = JetTypeMapper.jvmNameForInterface((ClassDescriptor) functionParent);
|
final String owner = JetTypeMapper.jvmNameForInterface((ClassDescriptor) functionParent);
|
||||||
v.invokeinterface(owner, methodDescriptor.getName(), methodDescriptor.getDescriptor());
|
v.invokeinterface(owner, methodDescriptor.getName(), methodDescriptor.getDescriptor());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user