blob: a46cbf5f5ad2564371d2ba33119cd2ec3a9120d2 [file]
class A {
companion object {
val s = "OK"
var v = "NOT OK"
}
inline fun g(crossinline f: () -> Unit) {
{
f()
s
v = "OK"
}.let { it() }
}
inline fun g2(crossinline f: () -> Unit) {
object {
fun run() {
f()
s
v = "OK"
}
}.run()
}
inline fun use() {
g {
s
g2 { s }
}
g {
v = "OK"
g2 {
v = "OK"
}
}
}
fun useNonInline() {
g {
s
g2 { s }
}
g {
v = "OK"
g2 {
v = "OK"
}
}
}
}
// One direct `A.s` access in the accessibility bridge `access$getS$cp`.
// 1 GETSTATIC A.s
// One direct `A.v` set in the accessibility bridge `access$setV$cp`.
// One direct `A.v` set in `A.<clinit>`
// 2 PUTSTATIC A.v
// Two accesses from the inline function code for `g` and `g2`.
// Four accesses from the code for `g` and `g2` inlined in `useInline`.
// Two accesses from the lambdas inlined in `useInline`.
// Four accesses from the code for `g` and `g2` inlined in `useNonInline`.
// 12 INVOKEVIRTUAL A\$Companion.getS
// Two accesses from the inline function code for `g` and `g2`.
// Four accesses from the code for `g` and `g2` inlined in `useInline`.
// Two accesses from the lambdas inlined in `useInline`.
// Four accesses from the code for `g` and `g2` inlined in `useNonInline`.
// 12 INVOKEVIRTUAL A\$Companion.setV
// One call to the accessibility bridge `access$setV$cp` from Companion.setV.
// Two uses of the direct accessor from the lambdas inlined in useNonInline.
// 3 INVOKESTATIC A.access\$setV\$cp
// One call to the accessibility bridge `access$getS$cp` from Companion.getS.
// Two uses of the direct accessor from the lambdas inlined in useNonInline.
// 3 INVOKESTATIC A.access\$getS\$cp