Files
kotlin/compiler/testData/codegen/bytecodeText/storeStackBeforeInline/withLambda.kt
Dmitry Petrov e71090ae4c Spill stack for inline functions only if it's required
Stack should be spilled before inline function call and restored after
call only if one of the following conditions is met:
- inline function is a suspend function
- inline function has try-catch blocks
- inline function has loops (backward jumps)

Note that there're quite some "simple" inline functions in Kotlin stdlib
besides run/let/with/apply. For example, many string operations are
implemented as inline wrappers over Java method calls.
2017-10-10 08:49:19 +03:00

18 lines
381 B
Kotlin
Vendored

inline fun <T> runAfterLoop(fn: () -> T): T {
for (i in 1..2);
return fn()
}
inline fun bar(x: String, block: (String) -> String) = runAfterLoop { "def" + block(x) }
fun foobar(x: String, y: String, z: String) = x + y + z
fun foo() : String {
return foobar("abc", bar("ghi") { x -> x + "jkl" }, "mno")
}
// 6 ASTORE
// 18 ALOAD
// 1 MAXLOCALS = 7
// 0 InlineMarker