From 8faf1e62d3901c55e0bacefe467598370a75dceb Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Fri, 24 Feb 2012 18:01:10 +0200 Subject: [PATCH] fix for NPE --- .../src/org/jetbrains/jet/codegen/CallableMethod.java | 2 +- .../src/org/jetbrains/jet/codegen/ClosureCodegen.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CallableMethod.java b/compiler/backend/src/org/jetbrains/jet/codegen/CallableMethod.java index 34e6d8f4879..966b6cc1807 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CallableMethod.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CallableMethod.java @@ -124,7 +124,7 @@ public class CallableMethod implements Callable { } public boolean isNeedsThis() { - return thisClass != null; + return thisClass != null && generateCalleeType == null; } public boolean isNeedsReceiver() { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java index d49fc46fc50..df5e3b9e66b 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java @@ -91,6 +91,7 @@ public class ClosureCodegen extends ObjectOrClosureCodegen { if (fd.getReceiverParameter().exists()) { result.setNeedsReceiver(fd); } + result.setNeedsThis(getInternalType(fd)); result.requestGenerateCallee(Type.getObjectType(getInternalClassName(fd))); return result; } @@ -337,6 +338,16 @@ public class ClosureCodegen extends ObjectOrClosureCodegen { } } + public static ClassDescriptor getInternalType(FunctionDescriptor descriptor) { + final int paramCount = descriptor.getValueParameters().size(); + if (descriptor.getReceiverParameter().exists()) { + return JetStandardClasses.getReceiverFunction(paramCount); + } + else { + return JetStandardClasses.getFunction(paramCount); + } + } + private void appendType(SignatureWriter signatureWriter, JetType type, char variance) { signatureWriter.visitTypeArgument(variance);