mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-30 09:54:49 +00:00
54 lines
1.2 KiB
Nim
54 lines
1.2 KiB
Nim
discard """
|
|
output: '''true
|
|
true
|
|
true
|
|
true
|
|
true'''
|
|
cmd: "nim c --gc:arc $file"
|
|
"""
|
|
# bug #15361
|
|
|
|
type
|
|
ErrorNodeKind = enum Branch, Leaf
|
|
Error = ref object
|
|
case kind: ErrorNodeKind
|
|
of Branch:
|
|
left: Error
|
|
right: Error
|
|
of Leaf:
|
|
leafError: string
|
|
input: string
|
|
|
|
proc ret(input: string, lefterr, righterr: Error): Error =
|
|
result = Error(kind: Branch, left: lefterr, right: righterr, input: input)
|
|
|
|
proc parser() =
|
|
var rerrors: Error
|
|
let lerrors = Error(
|
|
kind: Leaf,
|
|
leafError: "first error",
|
|
input: "123 ;"
|
|
)
|
|
# If you remove "block" - everything works
|
|
block:
|
|
let rresult = Error(
|
|
kind: Leaf,
|
|
leafError: "second error",
|
|
input: ";"
|
|
)
|
|
# this assignment is needed too
|
|
rerrors = rresult
|
|
|
|
# Returns Error(kind: Branch, left: lerrors, right: rerrors, input: "some val")
|
|
# needs to be a proc call for some reason, can't inline the result
|
|
var data = ret(input = "some val", lefterr = lerrors, righterr = rerrors)
|
|
|
|
echo data.left.leafError == "first error"
|
|
echo data.left.input == "123 ;"
|
|
# stacktrace shows this line
|
|
echo data.right.leafError == "second error"
|
|
echo data.right.input == ";"
|
|
echo data.input == "some val"
|
|
|
|
parser()
|