diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2019-09-19 14:34:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-19 14:34:56 +0200 |
commit | 162d74db91412d98a4a67b28c1e1c9c1d79a9873 (patch) | |
tree | c9875967c7ccfdfe3c7996b520d85eb6ff2b3167 /tests/vm/tmisc_vm.nim | |
parent | 363d0ada5038be0b236e0ec84bdd016e2186ef7f (diff) | |
download | Nim-162d74db91412d98a4a67b28c1e1c9c1d79a9873.tar.gz |
fixes #10981; fixes #7261 (#12217)
Diffstat (limited to 'tests/vm/tmisc_vm.nim')
-rw-r--r-- | tests/vm/tmisc_vm.nim | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/tests/vm/tmisc_vm.nim b/tests/vm/tmisc_vm.nim index 966f9d15e..7733314db 100644 --- a/tests/vm/tmisc_vm.nim +++ b/tests/vm/tmisc_vm.nim @@ -6,6 +6,10 @@ discard """ nimout: '''caught Exception main:begin main:end +@[{0}] +(width: 0, height: 0, path: "") +@[(width: 0, height: 0, path: ""), (width: 0, height: 0, path: "")] +Done! ''' """ @@ -81,3 +85,98 @@ proc simpleTryFinally()= echo "main:end" static: simpleTryFinally() + +# bug #10981 + +import sets + +proc main = + for i in 0..<15: + var someSets = @[initHashSet[int]()] + someSets[^1].incl(0) # <-- segfaults + if i == 0: + echo someSets + +static: + main() + +# bug #7261 +const file = """ +sprites.png +size: 1024,1024 +format: RGBA8888 +filter: Linear,Linear +repeat: none +char/slide_down + rotate: false + xy: 730, 810 + size: 204, 116 + orig: 204, 116 + offset: 0, 0 + index: -1 +""" + +type + AtlasPage = object + width, height: int + path: string + + CtsStream = object + data: string + pos: int + +proc atEnd(stream: CtsStream): bool = + stream.pos >= stream.data.len + +proc readChar(stream: var CtsStream): char = + if stream.atEnd: + result = '\0' + else: + result = stream.data[stream.pos] + inc stream.pos + +proc readLine(s: var CtsStream, line: var string): bool = + # This is pretty much copied from the standard library: + line.setLen(0) + while true: + var c = readChar(s) + if c == '\c': + c = readChar(s) + break + elif c == '\L': break + elif c == '\0': + if line.len > 0: break + else: return false + line.add(c) + result = true + +proc peekLine(s: var CtsStream, line: var string): bool = + let oldPos = s.pos + result = s.readLine(line) + s.pos = oldPos + +proc initCtsStream(data: string): CtsStream = + CtsStream( + pos: 0, + data: data + ) + +# ******************** +# Interesting stuff happens here: +# ******************** + +proc parseAtlas(stream: var CtsStream) = + var pages = @[AtlasPage(), AtlasPage()] + var line = "" + + block: + let page = addr pages[^1] + discard stream.peekLine(line) + discard stream.peekLine(line) + echo page[] + echo pages + +static: + var stream = initCtsStream(file) + parseAtlas(stream) + echo "Done!" |