proc mutate(a: var openarray[int]) = var i = 0 for x in a.mitems: x = i inc i proc mutate(a: var openarray[char]) = var i = 1 for ch in a.mitems: ch = 'a' static: var a = [10, 20, 30] assert a.toOpenArray(1, 2).len == 2 mutate(a) assert a.toOpenArray(0, 2) == [0, 1, 2] assert a.toOpenArray(0, 0) == [0] assert a.toOpenArray(1, 2) == [1, 2] assert "Hello".toOpenArray(1, 4) == "ello" var str = "Hello" str.toOpenArray(2, 4).mutate() assert str.toOpenArray(0, 4).len == 5 assert str.toOpenArray(0, 0).len == 1 assert str.toOpenArray(0, 0).high == 0 assert str == "Heaaa" assert str.toOpenArray(0, 4) == "Heaaa" var arr: array[3..4, int] = [1, 2] assert arr.toOpenArray(3, 4) == [1, 2] assert arr.toOpenArray(3, 4).len == 2 assert arr.toOpenArray(3, 3).high == 0 assert arr.toOpenArray(3, 4).toOpenArray(0, 0) == [1] proc doThing(s: static openArray[int]) = discard doThing([10, 20, 30].toOpenArray(0, 0)) # bug #19969 proc f(): array[1, byte] = var a: array[1, byte] result[0..0] = a.toOpenArray(0, 0) doAssert static(f()) == [byte(0)] # bug #15952 proc main1[T](a: openArray[T]) = discard proc main2[T](a: var openArray[T]) = discard proc main = var a = [1,2,3,4,5] main1(a.toOpenArray(1,3)) main2(a.toOpenArray(1,3)) static: main() main() # bug #16306 {.experimental: "views".} proc test(x: openArray[int]): tuple[id: int] = let y: openArray[int] = toOpenArray(x, 0, 2) result = (y[0],) template fn= doAssert test([0,1,2,3,4,5]).id == 0 fn() # ok static: fn()