diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 0c958145943..0daeccde04d 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1624,6 +1624,9 @@ public class ExpressionCodegen extends JetVisitor implem // descriptor = ((VariableAsFunctionDescriptor) descriptor).getVariableDescriptor(); //} + assert descriptor != null : "Couldn't find descriptor for '" + expression.getText() + "'"; + descriptor = descriptor.getOriginal(); + if (descriptor instanceof CallableMemberDescriptor) { CallableMemberDescriptor memberDescriptor = (CallableMemberDescriptor) descriptor; memberDescriptor = unwrapFakeOverride(memberDescriptor); @@ -1635,9 +1638,6 @@ public class ExpressionCodegen extends JetVisitor implem } } - - assert descriptor != null; - if (descriptor instanceof VariableDescriptorForObject) { VariableDescriptorForObject variableDescriptor = (VariableDescriptorForObject) descriptor; ClassDescriptor objectClassDescriptor = variableDescriptor.getObjectClass(); diff --git a/compiler/testData/codegen/box/closures/capturedLocalGenericFun.kt b/compiler/testData/codegen/box/closures/capturedLocalGenericFun.kt new file mode 100644 index 00000000000..ebe26220013 --- /dev/null +++ b/compiler/testData/codegen/box/closures/capturedLocalGenericFun.kt @@ -0,0 +1,14 @@ +fun box() : String { + + fun local(s : T) : T { + return s; + } + + fun test(s : Int) : Int { + return local(s) + } + + if (test(10) != 10) return "fail1" + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/closures/kt3905.kt b/compiler/testData/codegen/box/closures/kt3905.kt new file mode 100644 index 00000000000..0f7066f13b8 --- /dev/null +++ b/compiler/testData/codegen/box/closures/kt3905.kt @@ -0,0 +1,6 @@ +fun box() : String { + fun foo(t:() -> T) : T = t() + + return foo {} + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/closures/localGenericFun.kt b/compiler/testData/codegen/box/closures/localGenericFun.kt new file mode 100644 index 00000000000..fe55a5834b5 --- /dev/null +++ b/compiler/testData/codegen/box/closures/localGenericFun.kt @@ -0,0 +1,12 @@ +fun box() : String { + + fun local(s : T) : T { + return s; + } + + if (local(10) != 10) return "fail1" + + if (local("11") != "11") return "fail2" + + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index ac6070d63af..4a93bd4e2e5 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -1139,6 +1139,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/codegen/box/closures"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("capturedLocalGenericFun.kt") + public void testCapturedLocalGenericFun() throws Exception { + doTest("compiler/testData/codegen/box/closures/capturedLocalGenericFun.kt"); + } + @TestMetadata("closureInsideConstrucor.kt") public void testClosureInsideConstrucor() throws Exception { doTest("compiler/testData/codegen/box/closures/closureInsideConstrucor.kt"); @@ -1189,6 +1194,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/closures/kt2151.kt"); } + @TestMetadata("kt3905.kt") + public void testKt3905() throws Exception { + doTest("compiler/testData/codegen/box/closures/kt3905.kt"); + } + @TestMetadata("localFunctionInFunction.kt") public void testLocalFunctionInFunction() throws Exception { doTest("compiler/testData/codegen/box/closures/localFunctionInFunction.kt"); @@ -1199,6 +1209,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/closures/localFunctionInInitializer.kt"); } + @TestMetadata("localGenericFun.kt") + public void testLocalGenericFun() throws Exception { + doTest("compiler/testData/codegen/box/closures/localGenericFun.kt"); + } + @TestMetadata("localReturn.kt") public void testLocalReturn() throws Exception { doTest("compiler/testData/codegen/box/closures/localReturn.kt");