produce runtime type information for reified openArrays (#15415)

* produce runtime type information for reified openArrays

* added a test case
This commit is contained in:
Andreas Rumpf
2020-09-27 20:44:22 +02:00
committed by GitHub
parent 0ea559611d
commit f1ac01459c
4 changed files with 76 additions and 19 deletions

View File

@@ -0,0 +1,42 @@
discard """
output: '''asdf
asdf
231
231
'''
cmd: "nim c $file"
"""
{.experimental: "views".}
const
Whitespace = {' ', '\t', '\n', '\r'}
proc split*(s: string, seps: set[char] = Whitespace,
maxsplit: int = -1): seq[openArray[char]] =
var last = 0
var splits = maxsplit
result = @[]
while last <= len(s):
var first = last
while last < len(s) and s[last] notin seps:
inc(last)
if splits == 0: last = len(s)
{.noSideEffect.}:
result.add toOpenArray(s, first, last-1)
result.add toOpenArray(s, first, last-1)
if splits == 0: break
dec(splits)
inc(last)
proc `$`(x: openArray[char]): string =
result = newString(x.len)
for i in 0..<x.len: result[i] = x[i]
proc main() =
let words = split("asdf 231")
for x in words:
echo x
main()