From 299e944cf7777c9ac86ded5aa893d5af9cc08932 Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Sat, 24 Mar 2018 10:10:28 +0100 Subject: [PATCH] fixes the 'var T' checking --- compiler/parampatterns.nim | 7 ++----- tests/varres/twrong_parameter.nim | 12 ++++++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/compiler/parampatterns.nim b/compiler/parampatterns.nim index 6c37c976a8..9ca9f110d9 100644 --- a/compiler/parampatterns.nim +++ b/compiler/parampatterns.nim @@ -180,14 +180,11 @@ type proc exprRoot*(n: PNode): PSym = 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: case it.kind of nkSym: return it.sym of nkDotExpr, nkBracketExpr, nkHiddenAddr, - nkObjUpConv, nkObjDownConv, nkCheckedFieldExpr: + nkObjUpConv, nkObjDownConv, nkCheckedFieldExpr, nkHiddenDeref: it = it[0] of nkHiddenStdConv, nkHiddenSubConv, nkConv: it = it[1] @@ -202,7 +199,7 @@ proc exprRoot*(n: PNode): PSym = else: break 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. break diff --git a/tests/varres/twrong_parameter.nim b/tests/varres/twrong_parameter.nim index 34b0c74640..8a363dd198 100644 --- a/tests/varres/twrong_parameter.nim +++ b/tests/varres/twrong_parameter.nim @@ -1,12 +1,16 @@ discard """ - line: 6 - errormsg: "'x' is not the first parameter; context: 'x'" + line: 10 + 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 = - var y = 9 + var y: MyObject result = forward(45, y) echo foo()