diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2023-04-19 17:55:54 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-19 11:55:54 +0200 |
commit | 9cb06d357e75bdf74f99e1e982841d8bbe90ae0e (patch) | |
tree | 35d8d64d381165356fd59965985aed66a00b7a8d /tests | |
parent | 0d6b994bee6098dfa212a124d4b20fa700aa28ad (diff) | |
download | Nim-9cb06d357e75bdf74f99e1e982841d8bbe90ae0e.tar.gz |
fixes #21540; deref block at transf phase to make injectdestructors function properly (#21688)
* fixes #21540; deref block at transf phase to make injectdestructors function properly * add a test case * add one more test * fixes the type of block * transform block
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ccgbugs/tderefblock.nim | 55 |
1 files changed, 53 insertions, 2 deletions
diff --git a/tests/ccgbugs/tderefblock.nim b/tests/ccgbugs/tderefblock.nim index fd21a19b8..d3ba07667 100644 --- a/tests/ccgbugs/tderefblock.nim +++ b/tests/ccgbugs/tderefblock.nim @@ -1,6 +1,5 @@ discard """ - cmd: "nim c -d:release -d:danger $file" - matrix: ";--gc:orc" + matrix: "--mm:refc -d:release -d:danger;--mm:orc -d:useMalloc -d:release -d:danger" output: "42" """ @@ -23,3 +22,55 @@ proc m() = echo $f.a m() + +block: # bug #21540 + type + Option = object + val: string + has: bool + + proc some(val: string): Option = + result.has = true + result.val = val + + # Remove lent and it works + proc get(self: Option): lent string = + result = self.val + + type + StringStream = ref object + data: string + pos: int + + proc readAll(s: StringStream): string = + result = newString(s.data.len) + copyMem(addr(result[0]), addr(s.data[0]), s.data.len) + + proc newStringStream(s: string = ""): StringStream = + new(result) + result.data = s + + proc parseJson(s: string): string = + let stream = newStringStream(s) + result = stream.readAll() + + proc main = + let initialFEN = block: + let initialFEN = some parseJson("startpos") + initialFEN.get + + doAssert initialFEN == "startpos" + + main() + +import std/[ + json, + options +] + +block: # bug #21540 + let cheek = block: + let initialFEN = some("""{"initialFen": "startpos"}""".parseJson{"initialFen"}.getStr) + initialFEN.get + + doAssert cheek == "startpos" |