1    object MutArray<T> =
2        def from (slice : Slice<T>) =
3            let array = Array slice.size
4            for i = 0 until slice.size do
5                array[i] = slice[i]
6    
7            array
8    
9        def from (ptr : MutPtr<T>) (size : u32) = MutArray size =ptr
10   
11   object Array<T>
12       def from (slice : Slice<T>) = MutArray<T>.from slice |> as_readonly
13   
14   fun from_slice<T> (slice : Slice<T>) : Array<T> = Array<T>.from slice
15   fun from_slice<T> (slice : Slice<T>) : MutArray<T> = MutArray<T>.from slice
16   
17   def array_of<T> (array : Array<T> @vararg) = array
18   def mut_array_of<T> (array : MutArray<T> @vararg) = array
19   
20   type [T; N]
21       def to_array =
22           let array = Array size
23           for i = 0 until size do
24               array[i] = self[i]
25   
26           array
27   
28   def repeat_array<T> (x : T) (n : u32) =
29       let array = Array<T> n
30       for i = 0 until n do
31           array[i] = x
32   
33       array
34   
35   def repeat_array<T> (x : T) (n : i32) =
36       assert n >= 0
37       repeat_array x n.as<u32>
38