Evaluate expression: support captured vals

This commit is contained in:
Natalia Ukhorskaya
2014-07-01 17:38:15 +04:00
parent 6440884a40
commit 73e0ae1d1c
27 changed files with 383 additions and 46 deletions
@@ -2,6 +2,7 @@ LineBreakpoint created at frameClassObject.kt:15
!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! frameClassObject.FrameClassObjectPackage
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
frameClassObject.kt:14
Compile bytecode for prop
package frameClassObject
fun main(args: Array<String>) {
@@ -26,6 +27,9 @@ fun foo(f: () -> Unit) {
}
// PRINT_FRAME
// EXPRESSION: prop
// RESULT: 1: I
frame = invoke():15, A$test$1 {frameClassObject}
this = this = {frameClassObject.A$test$1@uniqueID}kotlin.Function0<kotlin.Unit>
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
@@ -2,6 +2,11 @@ LineBreakpoint created at frameExtFunExtFun.kt:22
!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! frameExtFunExtFun.FrameExtFunExtFunPackage
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
frameExtFunExtFun.kt:21
Compile bytecode for valFoo
Compile bytecode for valTest
Compile bytecode for aProp
Compile bytecode for outerProp
Compile bytecode for bProp
package frameExtFunExtFun
fun main(args: Array<String>) {
@@ -48,6 +53,21 @@ fun lambda(f: () -> Unit) {
}
// PRINT_FRAME
// EXPRESSION: valFoo
// RESULT: 1: I
// EXPRESSION: valTest
// RESULT: 1: I
// EXPRESSION: aProp
// RESULT: 1: I
// EXPRESSION: outerProp
// RESULT: 1: I
// EXPRESSION: bProp
// RESULT: 1: I
frame = invoke():22, Outer$foo$LocalClass$test$1 {frameExtFunExtFun}
this = this = {frameExtFunExtFun.Outer$foo$LocalClass$test$1@uniqueID}kotlin.Function0<kotlin.Unit>
field = this$0: frameExtFunExtFun.Outer$foo$LocalClass = {frameExtFunExtFun.Outer$foo$LocalClass@uniqueID}
@@ -2,6 +2,7 @@ LineBreakpoint created at frameExtensionFun.kt:13
!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! frameExtensionFun.FrameExtensionFunPackage
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
frameExtensionFun.kt:12
Compile bytecode for prop
package frameExtensionFun
fun main(args: Array<String>) {
@@ -18,6 +19,9 @@ fun A.foo() {
}
// PRINT_FRAME
// EXPRESSION: prop
// RESULT: 1: I
frame = foo():13, FrameExtensionFunPackage-@packagePartHASH {frameExtensionFun}
static = static = frameExtensionFun.FrameExtensionFunPackage-@packagePartHASH
local = $receiver: frameExtensionFun.A = {frameExtensionFun.A@uniqueID}
@@ -2,6 +2,8 @@ LineBreakpoint created at frameInnerClass.kt:15
!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! frameInnerClass.FrameInnerClassPackage
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
frameInnerClass.kt:14
Compile bytecode for prop1
Compile bytecode for prop2
package frameInnerClass
fun main(args: Array<String>) {
@@ -22,6 +24,12 @@ class A {
}
// PRINT_FRAME
// EXPRESSION: prop1
// RESULT: 1: I
// EXPRESSION: prop2
// RESULT: 1: I
frame = test():15, A$Inner {frameInnerClass}
this = this = {frameInnerClass.A$Inner@uniqueID}
field = prop2: int = 1
@@ -2,6 +2,9 @@ LineBreakpoint created at frameInnerLambda.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! frameInnerLambda.FrameInnerLambdaPackage
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
frameInnerLambda.kt:8
Compile bytecode for val1
Compile bytecode for val2
Compile bytecode for val1 + val2
package frameInnerLambda
fun main(args: Array<String>) {
@@ -20,6 +23,15 @@ fun foo(f: () -> Unit) {
}
// PRINT_FRAME
// EXPRESSION: val1
// RESULT: 1: I
// EXPRESSION: val2
// RESULT: 1: I
// EXPRESSION: val1 + val2
// RESULT: 2: I
frame = invoke():9, FrameInnerLambdaPackage$main$1$1 {frameInnerLambda}
this = this = {frameInnerLambda.FrameInnerLambdaPackage$main$1$1@uniqueID}kotlin.Function0<kotlin.Unit>
field = this$0: frameInnerLambda.FrameInnerLambdaPackage$main$1 = {frameInnerLambda.FrameInnerLambdaPackage$main$1@uniqueID}kotlin.Function0<kotlin.Unit>
@@ -2,6 +2,7 @@ LineBreakpoint created at frameLambda.kt:7
!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! frameLambda.FrameLambdaPackage
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
frameLambda.kt:6
Compile bytecode for val1
package frameLambda
fun main(args: Array<String>) {
@@ -17,6 +18,9 @@ fun foo(f: () -> Unit) {
}
// PRINT_FRAME
// EXPRESSION: val1
// RESULT: 1: I
frame = invoke():7, FrameLambdaPackage$main$1 {frameLambda}
this = this = {frameLambda.FrameLambdaPackage$main$1@uniqueID}kotlin.Function0<kotlin.Unit>
field = $val1: int = 1
@@ -0,0 +1,29 @@
LineBreakpoint created at frameLambdaNotUsed.kt:7
!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! frameLambdaNotUsed.FrameLambdaNotUsedPackage
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
frameLambdaNotUsed.kt:6
Compile bytecode for val1
package frameLambdaNotUsed
fun main(args: Array<String>) {
val val1 = 1
foo {
//Breakpoint!
val a = 1
}
}
fun foo(f: () -> Unit) {
f()
}
// PRINT_FRAME
// EXPRESSION: val1
// RESULT: Cannot find local variable: name = val1
frame = invoke():7, FrameLambdaNotUsedPackage$main$1 {frameLambdaNotUsed}
this = this = {frameLambdaNotUsed.FrameLambdaNotUsedPackage$main$1@uniqueID}kotlin.Function0<kotlin.Unit>
local = a: int = 0
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
Process finished with exit code 0
@@ -2,6 +2,7 @@ LineBreakpoint created at frameObject.kt:6
!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! frameObject.FrameObjectPackage
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
frameObject.kt:5
Compile bytecode for O.obProp
package frameObject
fun main(args: Array<String>) {
@@ -20,6 +21,9 @@ fun foo(f: () -> Unit) {
}
// PRINT_FRAME
// EXPRESSION: O.obProp
// RESULT: 1: I
frame = invoke():6, FrameObjectPackage$main$1 {frameObject}
this = this = {frameObject.FrameObjectPackage$main$1@uniqueID}kotlin.Function0<kotlin.Unit>
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
@@ -1,23 +1,48 @@
LineBreakpoint created at frameSimple.kt:8
LineBreakpoint created at frameSimple.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! frameSimple.FrameSimplePackage
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
frameSimple.kt:7
frameSimple.kt:8
Compile bytecode for val1
Compile bytecode for val2
Compile bytecode for topVal1
Compile bytecode for val1 + topVal1
package frameSimple
val topVal1 = 1
fun main(args: Array<String>) {
val val1 = 1
val val2 = "str"
//Breakpoint!
val1 + topVal1
}
// PRINT_FRAME
frame = main():8, FrameSimplePackage-@packagePartHASH {frameSimple}
// EXPRESSION: val1
// RESULT: 1: I
// EXPRESSION: val2
// RESULT: "str": Ljava/lang/String;
// EXPRESSION: topVal1
// RESULT: 1: I
// EXPRESSION: val1 + topVal1
// RESULT: 2: I
frame = main():9, FrameSimplePackage-@packagePartHASH {frameSimple}
static = static = frameSimple.FrameSimplePackage-@packagePartHASH
field = topVal1: int = 1
local = args: java.lang.String[] = {java.lang.String[0]@uniqueID}
local = val1: int = 1
local = val2: java.lang.String = {@uniqueID}str
field = value: char[] = {char[3]@uniqueID}
unknown = [0] = 's' 115
unknown = [1] = 't' 116
unknown = [2] = 'r' 114
field = offset: int = 0
field = count: int = 3
field = hash: int = 0
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
Process finished with exit code 0
@@ -2,6 +2,10 @@ LineBreakpoint created at frameThis0.kt:15
!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! frameThis0.FrameThis0Package
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
frameThis0.kt:14
Compile bytecode for val1
Compile bytecode for val2
Compile bytecode for prop1
Compile bytecode for prop1 + val1 + val2
package frameThis0
fun main(args: Array<String>) {
@@ -26,6 +30,18 @@ fun foo(f: () -> Unit) {
}
// PRINT_FRAME
// EXPRESSION: val1
// RESULT: 1: I
// EXPRESSION: val2
// RESULT: 1: I
// EXPRESSION: prop1
// RESULT: 1: I
// EXPRESSION: prop1 + val1 + val2
// RESULT: 3: I
frame = invoke():15, A$test$1 {frameThis0}
this = this = {frameThis0.A$test$1@uniqueID}kotlin.Function0<kotlin.Unit>
field = this$0: frameThis0.A = {frameThis0.A@uniqueID}
@@ -2,6 +2,11 @@ LineBreakpoint created at frameThis0Ext.kt:14
!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! frameThis0Ext.FrameThis0ExtPackage
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
frameThis0Ext.kt:13
Compile bytecode for val1
Compile bytecode for prop1
Compile bytecode for prop2
Compile bytecode for prop1 + val1
Compile bytecode for prop2 + val1
package frameThis0Ext
fun main(args: Array<String>) {
@@ -33,6 +38,21 @@ fun foo(f: () -> Unit) {
}
// PRINT_FRAME
// EXPRESSION: val1
// RESULT: 1: I
// EXPRESSION: prop1
// RESULT: 1: I
// EXPRESSION: prop2
// RESULT: 1: I
// EXPRESSION: prop1 + val1
// RESULT: 2: I
// EXPRESSION: prop2 + val1
// RESULT: 2: I
frame = invoke():14, A$testExt$1 {frameThis0Ext}
this = this = {frameThis0Ext.A$testExt$1@uniqueID}kotlin.Function0<kotlin.Unit>
field = this$0: frameThis0Ext.A = {frameThis0Ext.A@uniqueID}
@@ -2,6 +2,10 @@ LineBreakpoint created at frameThis0This0.kt:16
!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! frameThis0This0.FrameThis0This0Package
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
frameThis0This0.kt:15
Compile bytecode for val1
Compile bytecode for val2
Compile bytecode for prop1
Compile bytecode for prop1 + val1 + val2
package frameThis0This0
fun main(args: Array<String>) {
@@ -28,6 +32,18 @@ fun foo(f: () -> Unit) {
}
// PRINT_FRAME
// EXPRESSION: val1
// RESULT: 1: I
// EXPRESSION: val2
// RESULT: 1: I
// EXPRESSION: prop1
// RESULT: 1: I
// EXPRESSION: prop1 + val1 + val2
// RESULT: 3: I
frame = invoke():16, A$test$1$1 {frameThis0This0}
this = this = {frameThis0This0.A$test$1$1@uniqueID}kotlin.Function0<kotlin.Unit>
field = this$0: frameThis0This0.A$test$1 = {frameThis0This0.A$test$1@uniqueID}kotlin.Function0<kotlin.Unit>
@@ -21,4 +21,7 @@ fun foo(f: () -> Unit) {
f()
}
// PRINT_FRAME
// PRINT_FRAME
// EXPRESSION: prop
// RESULT: 1: I
@@ -43,4 +43,19 @@ fun lambda(f: () -> Unit) {
f()
}
// PRINT_FRAME
// PRINT_FRAME
// EXPRESSION: valFoo
// RESULT: 1: I
// EXPRESSION: valTest
// RESULT: 1: I
// EXPRESSION: aProp
// RESULT: 1: I
// EXPRESSION: outerProp
// RESULT: 1: I
// EXPRESSION: bProp
// RESULT: 1: I
@@ -13,4 +13,7 @@ fun A.foo() {
prop
}
// PRINT_FRAME
// PRINT_FRAME
// EXPRESSION: prop
// RESULT: 1: I
@@ -17,4 +17,10 @@ class A {
}
}
// PRINT_FRAME
// PRINT_FRAME
// EXPRESSION: prop1
// RESULT: 1: I
// EXPRESSION: prop2
// RESULT: 1: I
@@ -15,4 +15,13 @@ fun foo(f: () -> Unit) {
f()
}
// PRINT_FRAME
// PRINT_FRAME
// EXPRESSION: val1
// RESULT: 1: I
// EXPRESSION: val2
// RESULT: 1: I
// EXPRESSION: val1 + val2
// RESULT: 2: I
@@ -12,4 +12,7 @@ fun foo(f: () -> Unit) {
f()
}
// PRINT_FRAME
// PRINT_FRAME
// EXPRESSION: val1
// RESULT: 1: I
@@ -0,0 +1,18 @@
package frameLambdaNotUsed
fun main(args: Array<String>) {
val val1 = 1
foo {
//Breakpoint!
val a = 1
}
}
fun foo(f: () -> Unit) {
f()
}
// PRINT_FRAME
// EXPRESSION: val1
// RESULT: Cannot find local variable: name = val1
@@ -15,4 +15,7 @@ fun foo(f: () -> Unit) {
f()
}
// PRINT_FRAME
// PRINT_FRAME
// EXPRESSION: O.obProp
// RESULT: 1: I
@@ -4,8 +4,21 @@ val topVal1 = 1
fun main(args: Array<String>) {
val val1 = 1
val val2 = "str"
//Breakpoint!
val1 + topVal1
}
// PRINT_FRAME
// PRINT_FRAME
// EXPRESSION: val1
// RESULT: 1: I
// EXPRESSION: val2
// RESULT: "str": Ljava/lang/String;
// EXPRESSION: topVal1
// RESULT: 1: I
// EXPRESSION: val1 + topVal1
// RESULT: 2: I
@@ -21,4 +21,16 @@ fun foo(f: () -> Unit) {
f()
}
// PRINT_FRAME
// PRINT_FRAME
// EXPRESSION: val1
// RESULT: 1: I
// EXPRESSION: val2
// RESULT: 1: I
// EXPRESSION: prop1
// RESULT: 1: I
// EXPRESSION: prop1 + val1 + val2
// RESULT: 3: I
@@ -28,4 +28,19 @@ fun foo(f: () -> Unit) {
f()
}
// PRINT_FRAME
// PRINT_FRAME
// EXPRESSION: val1
// RESULT: 1: I
// EXPRESSION: prop1
// RESULT: 1: I
// EXPRESSION: prop2
// RESULT: 1: I
// EXPRESSION: prop1 + val1
// RESULT: 2: I
// EXPRESSION: prop2 + val1
// RESULT: 2: I
@@ -23,4 +23,16 @@ fun foo(f: () -> Unit) {
f()
}
// PRINT_FRAME
// PRINT_FRAME
// EXPRESSION: val1
// RESULT: 1: I
// EXPRESSION: val2
// RESULT: 1: I
// EXPRESSION: prop1
// RESULT: 1: I
// EXPRESSION: prop1 + val1 + val2
// RESULT: 3: I