Files
kotlin-fork/js/js.translator/testData/inlineEvaluationOrder/cases/lambdaWithClosure.kt
T
2015-04-16 21:17:12 +03:00

49 lines
992 B
Kotlin
Vendored

package foo
/* This tests checks, that lambda fabric invocation is not extracted.
An example:
fun foo() {
val status = "OK"
run { println(status) }
}
It's compiled to something like:
function foo() {
var status = "OK";
run(foo$(status));
}
function foo$(status) {
return function() {
console.log(status);
};
}
Thus, we need to be sure, that foo$() is not extracted to some temporary var.
*/
// CHECK_NOT_CALLED: max
// CHECK_NOT_CALLED: box$f
// CHECK_NOT_CALLED: box$f_0
inline fun max(getA: ()->Int, b: Int): Int {
val a = getA()
log("max($a, $b)")
if (a > b) return a
return b
}
fun box(): String {
val one = 1
val two = 2
val three = 3
val test = max({ fizz(one) }, max({ fizz(two) }, buzz(three)))
assertEquals(3, test)
assertEquals("buzz(3);fizz(2);max(2, 3);fizz(1);max(1, 3);", pullLog())
return "OK"
}