Redefine primitive arrays
diff --git a/core/builtins/native/kotlin/Arrays.kt b/core/builtins/native/kotlin/Arrays.kt
index b57605e..b1ab157f 100644
--- a/core/builtins/native/kotlin/Arrays.kt
+++ b/core/builtins/native/kotlin/Arrays.kt
@@ -7,299 +7,19 @@
 
 package kotlin
 
-/**
- * An array of bytes. When targeting the JVM, instances of this class are represented as `byte[]`.
- * @constructor Creates a new array of the specified [size], with all elements initialized to zero.
- */
-public class ByteArray(size: Int) {
-    /**
-     * Creates a new array of the specified [size], where each element is calculated by calling the specified
-     * [init] function.
-     *
-     * The function [init] is called for each array element sequentially starting from the first one.
-     * It should return the value for an array element given its index.
-     */
-    public inline constructor(size: Int, init: (Int) -> Byte)
-
-    /**
-     * Returns the array element at the given [index].  This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun get(index: Int): Byte
-
-    /**
-     * Sets the element at the given [index] to the given [value]. This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun set(index: Int, value: Byte): Unit
-
-    /** Returns the number of elements in the array. */
-    public val size: Int
-
-    /** Creates an iterator over the elements of the array. */
-    public operator fun iterator(): ByteIterator
-}
-
-/**
- * An array of chars. When targeting the JVM, instances of this class are represented as `char[]`.
- * @constructor Creates a new array of the specified [size], with all elements initialized to null char (`\u0000').
- */
-public class CharArray(size: Int) {
-    /**
-     * Creates a new array of the specified [size], where each element is calculated by calling the specified
-     * [init] function.
-     *
-     * The function [init] is called for each array element sequentially starting from the first one.
-     * It should return the value for an array element given its index.
-     */
-    public inline constructor(size: Int, init: (Int) -> Char)
-
-    /**
-     * Returns the array element at the given [index].  This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun get(index: Int): Char
-
-    /**
-     * Sets the element at the given [index] to the given [value]. This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun set(index: Int, value: Char): Unit
-
-    /** Returns the number of elements in the array. */
-    public val size: Int
-
-    /** Creates an iterator over the elements of the array. */
-    public operator fun iterator(): CharIterator
-}
-
-/**
- * An array of shorts. When targeting the JVM, instances of this class are represented as `short[]`.
- * @constructor Creates a new array of the specified [size], with all elements initialized to zero.
- */
-public class ShortArray(size: Int) {
-    /**
-     * Creates a new array of the specified [size], where each element is calculated by calling the specified
-     * [init] function.
-     *
-     * The function [init] is called for each array element sequentially starting from the first one.
-     * It should return the value for an array element given its index.
-     */
-    public inline constructor(size: Int, init: (Int) -> Short)
-
-    /**
-     * Returns the array element at the given [index].  This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun get(index: Int): Short
-
-    /**
-     * Sets the element at the given [index] to the given [value]. This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun set(index: Int, value: Short): Unit
-
-    /** Returns the number of elements in the array. */
-    public val size: Int
-
-    /** Creates an iterator over the elements of the array. */
-    public operator fun iterator(): ShortIterator
-}
-
-/**
- * An array of ints. When targeting the JVM, instances of this class are represented as `int[]`.
- * @constructor Creates a new array of the specified [size], with all elements initialized to zero.
- */
-public class IntArray(size: Int) {
-    /**
-     * Creates a new array of the specified [size], where each element is calculated by calling the specified
-     * [init] function.
-     *
-     * The function [init] is called for each array element sequentially starting from the first one.
-     * It should return the value for an array element given its index.
-     */
-    public inline constructor(size: Int, init: (Int) -> Int)
-
-    /**
-     * Returns the array element at the given [index].  This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun get(index: Int): Int
-
-    /**
-     * Sets the element at the given [index] to the given [value]. This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun set(index: Int, value: Int): Unit
-
-    /** Returns the number of elements in the array. */
-    public val size: Int
-
-    /** Creates an iterator over the elements of the array. */
-    public operator fun iterator(): IntIterator
-}
-
-/**
- * An array of longs. When targeting the JVM, instances of this class are represented as `long[]`.
- * @constructor Creates a new array of the specified [size], with all elements initialized to zero.
- */
-public class LongArray(size: Int) {
-    /**
-     * Creates a new array of the specified [size], where each element is calculated by calling the specified
-     * [init] function.
-     *
-     * The function [init] is called for each array element sequentially starting from the first one.
-     * It should return the value for an array element given its index.
-     */
-    public inline constructor(size: Int, init: (Int) -> Long)
-
-    /**
-     * Returns the array element at the given [index].  This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun get(index: Int): Long
-
-    /**
-     * Sets the element at the given [index] to the given [value]. This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun set(index: Int, value: Long): Unit
-
-    /** Returns the number of elements in the array. */
-    public val size: Int
-
-    /** Creates an iterator over the elements of the array. */
-    public operator fun iterator(): LongIterator
-}
-
-/**
- * An array of floats. When targeting the JVM, instances of this class are represented as `float[]`.
- * @constructor Creates a new array of the specified [size], with all elements initialized to zero.
- */
-public class FloatArray(size: Int) {
-    /**
-     * Creates a new array of the specified [size], where each element is calculated by calling the specified
-     * [init] function.
-     *
-     * The function [init] is called for each array element sequentially starting from the first one.
-     * It should return the value for an array element given its index.
-     */
-    public inline constructor(size: Int, init: (Int) -> Float)
-
-    /**
-     * Returns the array element at the given [index].  This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun get(index: Int): Float
-
-    /**
-     * Sets the element at the given [index] to the given [value]. This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun set(index: Int, value: Float): Unit
-
-    /** Returns the number of elements in the array. */
-    public val size: Int
-
-    /** Creates an iterator over the elements of the array. */
-    public operator fun iterator(): FloatIterator
-}
-
-/**
- * An array of doubles. When targeting the JVM, instances of this class are represented as `double[]`.
- * @constructor Creates a new array of the specified [size], with all elements initialized to zero.
- */
-public class DoubleArray(size: Int) {
-    /**
-     * Creates a new array of the specified [size], where each element is calculated by calling the specified
-     * [init] function.
-     *
-     * The function [init] is called for each array element sequentially starting from the first one.
-     * It should return the value for an array element given its index.
-     */
-    public inline constructor(size: Int, init: (Int) -> Double)
-
-    /**
-     * Returns the array element at the given [index].  This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun get(index: Int): Double
-
-    /**
-     * Sets the element at the given [index] to the given [value]. This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun set(index: Int, value: Double): Unit
-
-    /** Returns the number of elements in the array. */
-    public val size: Int
-
-    /** Creates an iterator over the elements of the array. */
-    public operator fun iterator(): DoubleIterator
-}
-
-/**
- * An array of booleans. When targeting the JVM, instances of this class are represented as `boolean[]`.
- * @constructor Creates a new array of the specified [size], with all elements initialized to `false`.
- */
-public class BooleanArray(size: Int) {
-    /**
-     * Creates a new array of the specified [size], where each element is calculated by calling the specified
-     * [init] function.
-     *
-     * The function [init] is called for each array element sequentially starting from the first one.
-     * It should return the value for an array element given its index.
-     */
-    public inline constructor(size: Int, init: (Int) -> Boolean)
-
-    /**
-     * Returns the array element at the given [index].  This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun get(index: Int): Boolean
-
-    /**
-     * Sets the element at the given [index] to the given [value]. This method can be called using the index operator.
-     *
-     * If the [index] is out of bounds of this array, throws an [IndexOutOfBoundsException] except in Kotlin/JS
-     * where the behavior is unspecified.
-     */
-    public operator fun set(index: Int, value: Boolean): Unit
-
-    /** Returns the number of elements in the array. */
-    public val size: Int
-
-    /** Creates an iterator over the elements of the array. */
-    public operator fun iterator(): BooleanIterator
-}
-
+typealias ByteArray = VArray<Byte>
+typealias CharArray = VArray<Char>
+typealias ShortArray = VArray<Short>
+typealias IntArray = VArray<Int>
+typealias LongArray = VArray<Long>
+typealias FloatArray = VArray<Float>
+typealias DoubleArray = VArray<Double>
+typealias BooleanArray = VArray<Boolean>
+fun ByteArray(size : Int) = VArray(size) { 0.toByte() }
+fun CharArray(size : Int) = VArray(size) { '\u0000' }
+fun ShortArray(size : Int) = VArray(size) { 0.toShort() }
+fun IntArray(size : Int) = VArray(size) { 0.toInt() }
+fun LongArray(size : Int) = VArray(size) { 0.toLong() }
+fun FloatArray(size : Int) = VArray(size) { 0.toFloat() }
+fun DoubleArray(size : Int) = VArray(size) { 0.toDouble() }
+fun BooleanArray(size : Int) = VArray(size) { false }
\ No newline at end of file