don't push receiver for static objects.

This commit is contained in:
Maxim Shafirov
2011-05-09 18:02:56 +04:00
parent 1992d384e3
commit e5c895eae1
@@ -552,8 +552,6 @@ public class ExpressionCodegen extends JetVisitor {
}
}
ensureReceiverOnStack(expression);
PsiElement declarationPsiElement = bindingContext.getDeclarationPsiElement(funDescriptor);
Method methodDescriptor;
if (declarationPsiElement instanceof PsiMethod) {
@@ -562,6 +560,11 @@ public class ExpressionCodegen extends JetVisitor {
pushMethodArguments(expression, methodDescriptor);
final boolean isStatic = psiMethod.hasModifierProperty(PsiModifier.STATIC);
if (!isStatic) {
ensureReceiverOnStack(expression);
}
v.visitMethodInsn(isStatic ? Opcodes.INVOKESTATIC : Opcodes.INVOKEVIRTUAL,
JetTypeMapper.jvmName(psiMethod.getContainingClass()),
methodDescriptor.getName(),
@@ -575,6 +578,7 @@ public class ExpressionCodegen extends JetVisitor {
v.invokestatic(owner, methodDescriptor.getName(), methodDescriptor.getDescriptor());
}
else if (functionParent instanceof ClassDescriptor && declarationPsiElement instanceof JetFunction) {
ensureReceiverOnStack(expression);
final String owner = JetTypeMapper.jvmNameForInterface((ClassDescriptor) functionParent);
v.invokeinterface(owner, methodDescriptor.getName(), methodDescriptor.getDescriptor());
}