KT-1406 wrong generation of receiver for ext.fun called inside closure

This commit is contained in:
Alex Tkachman
2012-02-24 16:24:16 +02:00
parent 17d34e9d49
commit 6146ec4268
4 changed files with 36 additions and 1 deletions
@@ -1246,11 +1246,11 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
if(resolvedCall == null) {
throw new CompilationException("Cannot resolve: " + callee.getText(), null, expression);
}
receiver = StackValue.receiver(resolvedCall, receiver, this, null);
DeclarationDescriptor funDescriptor = resolvedCall.getResultingDescriptor();
if (funDescriptor instanceof ConstructorDescriptor) {
receiver = StackValue.receiver(resolvedCall, receiver, this, null);
return generateConstructorCall(expression, (JetSimpleNameExpression) callee, receiver);
}
else if (funDescriptor instanceof FunctionDescriptor) {
@@ -1295,6 +1295,10 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
return returnValueAsStackValue((FunctionDescriptor) fd, callReturnType);
}
else {
ResolvedCall<? extends CallableDescriptor> resolvedCall = bindingContext.get(BindingContext.RESOLVED_CALL, expression.getCalleeExpression());
assert resolvedCall != null;
receiver = StackValue.receiver(resolvedCall, receiver, this, null);
IntrinsicMethod intrinsic = (IntrinsicMethod) callable;
List<JetExpression> args = new ArrayList<JetExpression>();
for (ValueArgument argument : expression.getValueArguments()) {