don't forget to put receiver on stack when calling extension functions

This commit is contained in:
Dmitry Jemerov
2011-05-27 18:11:42 +04:00
parent ff6fcabd00
commit 6dfa8ca8c6
5 changed files with 52 additions and 21 deletions
@@ -722,13 +722,17 @@ public class ExpressionCodegen extends JetVisitor {
methodDescriptor.getDescriptor());
}
else {
methodDescriptor = typeMapper.mapSignature((JetFunction) declarationPsiElement);
if (functionParent instanceof NamespaceDescriptorImpl && declarationPsiElement instanceof JetFunction) {
final JetFunction jetFunction = (JetFunction) declarationPsiElement;
methodDescriptor = typeMapper.mapSignature(jetFunction);
if (functionParent instanceof NamespaceDescriptorImpl) {
if (jetFunction.getReceiverTypeRef() != null) {
ensureReceiverOnStack(expression);
}
pushMethodArguments(expression, methodDescriptor);
final String owner = NamespaceCodegen.getJVMClassName(DescriptorRenderer.getFQName(functionParent));
v.invokestatic(owner, methodDescriptor.getName(), methodDescriptor.getDescriptor());
}
else if (functionParent instanceof ClassDescriptor && declarationPsiElement instanceof JetFunction) {
else if (functionParent instanceof ClassDescriptor) {
ensureReceiverOnStack(expression);
pushMethodArguments(expression, methodDescriptor);
final String owner = JetTypeMapper.jvmNameForInterface((ClassDescriptor) functionParent);