diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2017-11-02 22:09:58 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-11-02 22:09:58 +0100 |
commit | 0f5261e9711c3fd57241874963bd5e45b11ed65e (patch) | |
tree | 0d5c101ccbf9010215ea291a0a7f443e5fe98004 | |
parent | cccdd9b58ef35f13c74abfd10cfd416a8f70061b (diff) | |
download | Nim-0f5261e9711c3fd57241874963bd5e45b11ed65e.tar.gz |
fixes #6675
-rw-r--r-- | lib/system.nim | 4 | ||||
-rw-r--r-- | tests/array/troof1.nim | 8 |
2 files changed, 9 insertions, 3 deletions
diff --git a/lib/system.nim b/lib/system.nim index 92c5e009f..0cae4da87 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -3493,14 +3493,14 @@ proc `[]`*[Idx, T, U, V](a: array[Idx, T], x: HSlice[U, V]): seq[T] = let xa = a ^^ x.a let L = (a ^^ x.b) - xa + 1 result = newSeq[T](L) - for i in 0..<L: result[i] = a[Idx(i + xa + int low(a))] + for i in 0..<L: result[i] = a[Idx(i + xa)] proc `[]=`*[Idx, T, U, V](a: var array[Idx, T], x: HSlice[U, V], b: openArray[T]) = ## slice assignment for arrays. let xa = a ^^ x.a let L = (a ^^ x.b) - xa + 1 if L == b.len: - for i in 0..<L: a[Idx(i + xa + int low(a))] = b[i] + for i in 0..<L: a[Idx(i + xa)] = b[i] else: sysFatal(RangeError, "different lengths for slice assignment") diff --git a/tests/array/troof1.nim b/tests/array/troof1.nim index 1ee63826e..594ad98a5 100644 --- a/tests/array/troof1.nim +++ b/tests/array/troof1.nim @@ -4,7 +4,8 @@ discard """ 3 @[(Field0: 1, Field1: 2), (Field0: 3, Field1: 5)] 2 -@[a, new one, c]''' +@[a, new one, c] +@[1, 2, 3]''' """ proc foo[T](x, y: T): T = x @@ -35,3 +36,8 @@ useOpenarray([1, 2, 3]) var z = @["a", "b", "c"] mutOpenarray(z) echo z + +# bug #6675 +var y: array[1..5, int] = [1,2,3,4,5] +y[3..5] = [1, 2, 3] +echo y[3..5] |