|  | // Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | package lambdas_jstyle_trivial | 
|  |  | 
|  | import lambdas_jstyle_trivial.inner.testInner | 
|  |  | 
|  | private var COUNT = 0 | 
|  |  | 
|  | fun nextInt() = COUNT++ | 
|  | fun next() = "${nextInt()}".padStart(3, '0') | 
|  |  | 
|  | fun main(args: Array<String>) { | 
|  | test() | 
|  | testInner() | 
|  | } | 
|  |  | 
|  | private fun test() { | 
|  | test1(nextInt(), nextInt(), nextInt(), nextInt()) | 
|  | test2(next(), next(), next()) | 
|  | test3a(next(), next(), next()) | 
|  | test3a(next(), Local(next()), Local(Local(next()))) | 
|  | test3b(next(), next(), next()) | 
|  | test3b(next(), Local(next()), Local(next())) | 
|  | } | 
|  |  | 
|  | private data class Local<out T>(val id: T) | 
|  |  | 
|  | private fun test1(c0: Int, c1: Int, c2: Int, c3: Int) { | 
|  | Lambdas.acceptIntConsumer({ println("{${next()}:$it}") }, nextInt()) | 
|  | Lambdas.acceptIntConsumer({ println("{${next()}:$it}") }, nextInt()) | 
|  |  | 
|  | Lambdas.acceptStringConsumer({ println("${next()}:{$it}:{$c0}") }, next()) | 
|  | Lambdas.acceptStringConsumer({ println("${next()}:{$it}:{$c0}") }, next()) | 
|  |  | 
|  | Lambdas.acceptGenericConsumer({ println("${next()}:{$it}:{$c0}:{$c1}") }, next()) | 
|  | Lambdas.acceptGenericConsumer({ println("${next()}:{$it}:{$c0}:{$c1}") }, next()) | 
|  |  | 
|  | Lambdas.acceptGenericConsumer({ println("${next()}:{$it}:{$c0}:{$c1}:{$c2}") }, Local(next())) | 
|  | Lambdas.acceptGenericConsumer({ println("${next()}:{$it}:{$c0}:{$c1}:{$c2}") }, Local(next())) | 
|  |  | 
|  | Lambdas.acceptGenericConsumer( | 
|  | { println("${next()}:{$it}:{$c0}:{$c1}:{$c2}:{$c3}") }, Local(Local(next()))) | 
|  | Lambdas.acceptGenericConsumer( | 
|  | { println("${next()}:{$it}:{$c0}:{$c1}:{$c2}:{$c3}") }, Local(Local(next()))) | 
|  | } | 
|  |  | 
|  | private fun test2(c0: String, c1: String, c2: String) { | 
|  | println(Lambdas.acceptIntSupplier { nextInt() }) | 
|  | println(Lambdas.acceptIntSupplier { nextInt() }) | 
|  |  | 
|  | println(Lambdas.acceptStringSupplier { "${next()}:$c0" }) | 
|  | println(Lambdas.acceptStringSupplier { "${next()}:$c0" }) | 
|  |  | 
|  | println(Lambdas.acceptGenericSupplier { "${next()}:$c0" }) | 
|  | println(Lambdas.acceptGenericSupplier { "${next()}:$c0" }) | 
|  |  | 
|  | println(Lambdas.acceptGenericSupplier { "${Local(next())}:$c0:$c1" }) | 
|  | println(Lambdas.acceptGenericSupplier { "${Local(next())}:$c0:$c1" }) | 
|  |  | 
|  | println(Lambdas.acceptGenericSupplier { "${Local(Local(next()))}:$c0:$c1:$c2" }) | 
|  | println(Lambdas.acceptGenericSupplier { "${Local(Local(next()))}:$c0:$c1:$c2" }) | 
|  | } | 
|  |  | 
|  | private fun <P1, P2, P3> test3a(a: P1, b: P2, c: P3) { | 
|  | Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, a, b, c) | 
|  | Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, c, a, b) | 
|  | Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, b, c, a) | 
|  | Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, Local(a), b, c) | 
|  | Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, Local(b), a, c) | 
|  | Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, a, Local(b), c) | 
|  | Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, a, Local(c), b) | 
|  | Lambdas.acceptMultiFunction( | 
|  | { x, y, z -> "$x:$y:$z" }, Local(Local(a)), Local(Local(b)), Local(Local(c))) | 
|  | Lambdas.acceptMultiFunction( | 
|  | { x, y, z -> "$x:$y:$z" }, Local(Local(c)), Local(Local(a)), Local(Local(b))) | 
|  | } | 
|  |  | 
|  | private fun <P> test3b(a: P, b: P, c: P) { | 
|  | Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, a, b, c) | 
|  | Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, c, a, b) | 
|  | Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, b, c, a) | 
|  | Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, Local(a), b, c) | 
|  | Lambdas.acceptMultiFunction({ x, y, z -> "$x:$y:$z" }, Local(b), a, c) | 
|  | } | 
|  |  |