From d345ba05dd10506bc45274387dc105c1909db908 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 11 Dec 2014 10:22:00 +0300 Subject: [PATCH] Added inline function "Array" into stdlib It has the same signature and semantics as Array constructor had Also made Array constructor private and accepting no arguments --- compiler/testData/builtin-classes.txt | 2 +- core/builtins/native/kotlin/Array.kt | 2 +- .../intrinsic/functions/factories/ArrayFIF.java | 5 ----- libraries/stdlib/src/kotlin/collections/Arrays.kt | 10 ++++++++++ 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/compiler/testData/builtin-classes.txt b/compiler/testData/builtin-classes.txt index b9280d7b721..2a1dcefd3cc 100644 --- a/compiler/testData/builtin-classes.txt +++ b/compiler/testData/builtin-classes.txt @@ -14,7 +14,7 @@ public open class Any { } public final class Array : kotlin.Cloneable { - /*primary*/ public constructor Array(/*0*/ size: kotlin.Int, /*1*/ init: kotlin.Function1) + /*primary*/ private constructor Array() public open override /*1*/ fun clone(): kotlin.Array public final fun get(/*0*/ index: kotlin.Int): T public final fun iterator(): kotlin.Iterator diff --git a/core/builtins/native/kotlin/Array.kt b/core/builtins/native/kotlin/Array.kt index 7314c46f8e9..5f20680ccad 100644 --- a/core/builtins/native/kotlin/Array.kt +++ b/core/builtins/native/kotlin/Array.kt @@ -16,7 +16,7 @@ package kotlin -public class Array(size: Int, init: (Int) -> T) : Cloneable { +public class Array private (): Cloneable { public fun get(index: Int): T public fun set(index: Int, value: T): Unit diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/ArrayFIF.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/ArrayFIF.java index 5c5f3342d3b..b5dfa13e7eb 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/ArrayFIF.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/ArrayFIF.java @@ -49,9 +49,6 @@ public final class ArrayFIF extends CompositeFIF { @NotNull private static final NamePredicate LONG_ARRAY; - @NotNull - private static final NamePredicate ARRAY; - @NotNull private static final NamePredicate ARRAYS; @@ -78,7 +75,6 @@ public final class ArrayFIF extends CompositeFIF { CHAR_ARRAY = new NamePredicate(charArrayName); BOOLEAN_ARRAY = new NamePredicate(booleanArrayName); LONG_ARRAY = new NamePredicate(longArrayName); - ARRAY = new NamePredicate(arrayName); arrayTypeNames.add(charArrayName); arrayTypeNames.add(booleanArrayName); @@ -139,7 +135,6 @@ public final class ArrayFIF extends CompositeFIF { add(pattern(ARRAYS, "set"), SET_INTRINSIC); add(pattern(ARRAYS, "size"), LENGTH_PROPERTY_INTRINSIC); add(pattern(ARRAYS, "iterator"), new KotlinFunctionIntrinsic("arrayIterator")); - add(pattern(ARRAY, ""), new KotlinFunctionIntrinsic("arrayFromFun")); add(pattern(NUMBER_ARRAY, ""),new KotlinFunctionIntrinsic("numberArrayOfSize")); add(pattern(CHAR_ARRAY, ""), new KotlinFunctionIntrinsic("charArrayOfSize")); add(pattern(BOOLEAN_ARRAY, ""), new KotlinFunctionIntrinsic("booleanArrayOfSize")); diff --git a/libraries/stdlib/src/kotlin/collections/Arrays.kt b/libraries/stdlib/src/kotlin/collections/Arrays.kt index 5b8c5be472f..75540a56529 100644 --- a/libraries/stdlib/src/kotlin/collections/Arrays.kt +++ b/libraries/stdlib/src/kotlin/collections/Arrays.kt @@ -1,5 +1,15 @@ package kotlin +public inline fun Array(size: Int, init: (Int) -> T): Array { + val result = arrayOfNulls(size) + + for (i in 0..size - 1) { + result[i] = init(i) + } + + return result as Array +} + public val BooleanArray.lastIndex: Int get() = this.size - 1