fun nsum(vararg args: Number): Int { return sum(args = [*IntArray(size = args.(), init = local fun (it: Int): Int { return args.get(index = it).toInt() } )]) } fun sum(vararg args: Int): Int { var result: Int = 0 { // BLOCK val tmp_0: IntIterator = args.iterator() while (tmp_0.hasNext()) { // BLOCK val arg: Int = tmp_0.next() result = result.plus(other = arg) } } return result } fun testArrayAndDefaults() { useStringArray(fn = { // BLOCK local fun zap(p0: Array) { zap(b = [*p0]) } ::zap }) } fun testArrayAsVararg() { useArray(fn = ::nsum) } fun testPlainArgs() { usePlainArgs(fn = { // BLOCK local fun sum(p0: Int, p1: Int): Int { return sum(args = [p0, p1]) } ::sum }) } fun testPrimitiveArrayAsVararg() { usePrimitiveArray(fn = ::sum) } fun useArray(fn: Function1, Int>) { } fun usePlainArgs(fn: Function2) { } fun usePrimitiveArray(fn: Function1) { } fun useStringArray(fn: Function1, Unit>) { } fun zap(vararg b: String, k: Int = 42) { }