Generate invokeSpecial for all private functions

This commit is contained in:
Natalia Ukhorskaya
2014-06-19 15:51:48 +04:00
parent c847d180a7
commit 28cbe95e0c
3 changed files with 28 additions and 5 deletions
@@ -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;
}
@@ -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
@@ -1,6 +1,10 @@
package privateMember
fun main(args: Array<String>) {
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
// RESULT: 1: I
// EXPRESSION: base.privateFun()
// RESULT: 2: I
// EXPRESSION: derived.privateFun()
// RESULT: 3: I
// EXPRESSION: derivedAsBase.privateFun()
// RESULT: 2: I