mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-04 12:07:51 +00:00
fixes a strict case object problem that has been reported on the forum (#20614)
This commit is contained in:
@@ -68,9 +68,12 @@ proc isLetLocation(m: PNode, isApprox: bool): bool =
|
||||
case n.kind
|
||||
of nkDotExpr, nkCheckedFieldExpr, nkObjUpConv, nkObjDownConv:
|
||||
n = n[0]
|
||||
of nkDerefExpr, nkHiddenDeref:
|
||||
of nkDerefExpr:
|
||||
n = n[0]
|
||||
inc derefs
|
||||
of nkHiddenDeref:
|
||||
n = n[0]
|
||||
if not isApprox: inc derefs
|
||||
of nkBracketExpr:
|
||||
if isConstExpr(n[1]) or isLet(n[1]) or isConstExpr(n[1].skipConv):
|
||||
n = n[0]
|
||||
|
||||
@@ -1,10 +1,30 @@
|
||||
discard """
|
||||
errormsg: "field access outside of valid case branch: x.x"
|
||||
line: 25
|
||||
line: 45
|
||||
"""
|
||||
|
||||
{.experimental: "strictCaseObjects".}
|
||||
|
||||
type
|
||||
NodeKind = enum
|
||||
nkParent,
|
||||
nkChild
|
||||
|
||||
Node {.acyclic.} = ref object
|
||||
case kind: NodeKind
|
||||
of nkParent:
|
||||
children: seq[Node]
|
||||
of nkChild:
|
||||
name: string
|
||||
|
||||
let list = @[Node(kind: nkParent, children: @[]), Node(kind: nkChild, name: "hello")]
|
||||
for node in list:
|
||||
case node.kind
|
||||
of nkChild:
|
||||
echo $node.name # here this time there is a warning
|
||||
else: discard
|
||||
|
||||
|
||||
type
|
||||
Foo = object
|
||||
case b: bool
|
||||
|
||||
Reference in New Issue
Block a user