* fixes #15361; better cursor inference
This commit is contained in:
Andreas Rumpf 2020-09-24 15:41:45 +02:00 • committed by GitHub
commit 4ec5cbac0d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 196 additions and 45 deletions

View file

@ -0,0 +1,53 @@
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()