fixes the 'var T' checking
This commit is contained in:
parent
3be4f9111c
commit
299e944cf7
2 changed files with 10 additions and 9 deletions
|
|
@ -180,14 +180,11 @@ type
|
||||||
|
|
||||||
proc exprRoot*(n: PNode): PSym =
|
proc exprRoot*(n: PNode): PSym =
|
||||||
var it = n
|
var it = n
|
||||||
# the sem'check can generate a spurious 'nkHiddenDeref' for some
|
|
||||||
# cases. we skip it here:
|
|
||||||
if it.kind == nkHiddenDeref: it = it[0]
|
|
||||||
while true:
|
while true:
|
||||||
case it.kind
|
case it.kind
|
||||||
of nkSym: return it.sym
|
of nkSym: return it.sym
|
||||||
of nkDotExpr, nkBracketExpr, nkHiddenAddr,
|
of nkDotExpr, nkBracketExpr, nkHiddenAddr,
|
||||||
nkObjUpConv, nkObjDownConv, nkCheckedFieldExpr:
|
nkObjUpConv, nkObjDownConv, nkCheckedFieldExpr, nkHiddenDeref:
|
||||||
it = it[0]
|
it = it[0]
|
||||||
of nkHiddenStdConv, nkHiddenSubConv, nkConv:
|
of nkHiddenStdConv, nkHiddenSubConv, nkConv:
|
||||||
it = it[1]
|
it = it[1]
|
||||||
|
|
@ -202,7 +199,7 @@ proc exprRoot*(n: PNode): PSym =
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
# nkHiddenDeref, nkDerefExpr: assume the 'var T' addresses
|
# nkDerefExpr: assume the 'var T' addresses
|
||||||
# the heap and so the location is not on the stack.
|
# the heap and so the location is not on the stack.
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,16 @@
|
||||||
discard """
|
discard """
|
||||||
line: 6
|
line: 10
|
||||||
errormsg: "'x' is not the first parameter; context: 'x'"
|
errormsg: "'x' is not the first parameter; context: 'x.field[0]'"
|
||||||
"""
|
"""
|
||||||
|
|
||||||
proc forward(abc: int; x: var int): var int = result = x
|
type
|
||||||
|
MyObject = object
|
||||||
|
field: array[2, int]
|
||||||
|
|
||||||
|
proc forward(abc: int; x: var MyObject): var int = result = x.field[0]
|
||||||
|
|
||||||
proc foo(): var int =
|
proc foo(): var int =
|
||||||
var y = 9
|
var y: MyObject
|
||||||
result = forward(45, y)
|
result = forward(45, y)
|
||||||
|
|
||||||
echo foo()
|
echo foo()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue