From 17fa105116e4ba47ac92bcb1322537a1e0fbcb64 Mon Sep 17 00:00:00 2001 From: "Natalia.Ukhorskaya" Date: Wed, 5 Dec 2012 13:28:18 +0400 Subject: [PATCH] Generate INVOKESPECIAL instruction for private method with default argument --- .../org/jetbrains/jet/codegen/FunctionCodegen.java | 2 +- .../codegen/functions/privateDefaultArgs.kt | 13 +++++++++++++ .../org/jetbrains/jet/codegen/FunctionGenTest.java | 7 +++++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/functions/privateDefaultArgs.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java index d2d487da7b1..8f2ee0afe8c 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -687,7 +687,7 @@ public class FunctionCodegen extends GenerationStateAware { iv.invokeinterface(internalName, jvmSignatureName, jvmSignatureDescriptor); } else { - if (!constructor) { + if (!constructor && functionDescriptor.getVisibility() != Visibilities.PRIVATE) { iv.invokevirtual(internalName, jvmSignatureName, jvmSignatureDescriptor); } else { diff --git a/compiler/testData/codegen/functions/privateDefaultArgs.kt b/compiler/testData/codegen/functions/privateDefaultArgs.kt new file mode 100644 index 00000000000..261a0add314 --- /dev/null +++ b/compiler/testData/codegen/functions/privateDefaultArgs.kt @@ -0,0 +1,13 @@ +// Check that this code doesn't contains INVOKEVIRTUAL instruction +class B { + private fun foo(i: Int = 1) { + } + + fun f() { + foo(2) + } +} + +fun box(): String { + return "OK" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java index cac49438062..3fc36bc3f3b 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/FunctionGenTest.java @@ -195,4 +195,11 @@ public class FunctionGenTest extends CodegenTestCase { public void testKt2929() { blackBoxFile("regressions/kt2929.kt"); } + + public void testPrivateDefaultArgs() throws Exception { + loadFile("functions/privateDefaultArgs.kt"); + String text = generateToText(); + assertFalse(text.contains("INVOKEVIRTUAL")); + assertTrue(text.contains("INVOKESPECIAL")); + } }