From 28cbe95e0cbd20eac464535f40602fc4cd662c87 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Thu, 19 Jun 2014 15:51:48 +0400 Subject: [PATCH] Generate invokeSpecial for all private functions --- .../jet/codegen/state/JetTypeMapper.java | 3 +-- .../debugger/tinyApp/outs/privateMember.out | 7 ++++-- .../singleBreakpoint/privateMember.kt | 23 ++++++++++++++++++- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java index 38849663539..6dee5371442 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java @@ -446,8 +446,7 @@ public class JetTypeMapper { invokeOpcode = INVOKEINTERFACE; } else { - boolean isPrivateFunInvocation = isCallInsideSameClassAsDeclared(functionDescriptor, context) && - functionDescriptor.getVisibility() == Visibilities.PRIVATE; + boolean isPrivateFunInvocation = functionDescriptor.getVisibility() == Visibilities.PRIVATE; invokeOpcode = superCall || isPrivateFunInvocation ? INVOKESPECIAL : INVOKEVIRTUAL; } diff --git a/idea/testData/debugger/tinyApp/outs/privateMember.out b/idea/testData/debugger/tinyApp/outs/privateMember.out index 64268d1cda5..94b8493961c 100644 --- a/idea/testData/debugger/tinyApp/outs/privateMember.out +++ b/idea/testData/debugger/tinyApp/outs/privateMember.out @@ -1,10 +1,13 @@ -LineBreakpoint created at privateMember.kt:5 +LineBreakpoint created at privateMember.kt:9 !JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !APP_PATH!\classes;!KOTLIN_RUNTIME!;!RT_JAR! privateMember.PrivateMemberPackage Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' -privateMember.kt:4 +privateMember.kt:8 Compile bytecode for MyClass().privateFun() Compile bytecode for MyClass().privateVal Compile bytecode for MyClass.PrivateClass().a +Compile bytecode for base.privateFun() +Compile bytecode for derived.privateFun() +Compile bytecode for derivedAsBase.privateFun() Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' Process finished with exit code 0 diff --git a/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/privateMember.kt b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/privateMember.kt index 8559185ed2c..1ced9ae98d6 100644 --- a/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/privateMember.kt +++ b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/privateMember.kt @@ -1,6 +1,10 @@ package privateMember fun main(args: Array) { + val base = Base() + val derived = Derived() + val derivedAsBase: Base = Derived() + //Breakpoint! args.size } @@ -14,6 +18,14 @@ class MyClass { } } +open class Base { + private fun privateFun() = 2 +} + +class Derived: Base() { + private fun privateFun() = 3 +} + // EXPRESSION: MyClass().privateFun() // RESULT: 1: I @@ -21,4 +33,13 @@ class MyClass { // RESULT: 1: I // EXPRESSION: MyClass.PrivateClass().a -// RESULT: 1: I \ No newline at end of file +// RESULT: 1: I + +// EXPRESSION: base.privateFun() +// RESULT: 2: I + +// EXPRESSION: derived.privateFun() +// RESULT: 3: I + +// EXPRESSION: derivedAsBase.privateFun() +// RESULT: 2: I