diff options
author | Araq <rumpf_a@web.de> | 2016-12-30 02:21:15 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2016-12-30 02:21:15 +0100 |
commit | cfea779e23bbcd586044cfe7be412dc87aad7c50 (patch) | |
tree | 30d2a3365023b4612928af3c89b5bc3ab200b074 /compiler | |
parent | 45001632cef209269815bc4c8ae6af10f8c6a161 (diff) | |
download | Nim-cfea779e23bbcd586044cfe7be412dc87aad7c50.tar.gz |
fixes #2050
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/semstmts.nim | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index ec4279e60..365109249 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -70,7 +70,7 @@ proc toCover(t: PType): BiggestInt = else: result = lengthOrd(skipTypes(t, abstractVar-{tyTypeDesc})) -proc performProcvarCheck(c: PContext, n: PNode, s: PSym) = +proc performProcvarCheck(c: PContext, info: TLineInfo, s: PSym) = ## Checks that the given symbol is a proper procedure variable, meaning ## that it var smoduleId = getModule(s).id @@ -80,13 +80,17 @@ proc performProcvarCheck(c: PContext, n: PNode, s: PSym) = for module in c.friendModules: if smoduleId == module.id: break outer - localError(n.info, errXCannotBePassedToProcVar, s.name.s) + localError(info, errXCannotBePassedToProcVar, s.name.s) proc semProcvarCheck(c: PContext, n: PNode) = - let n = n.skipConv - if n.kind == nkSym and n.sym.kind in {skProc, skMethod, skConverter, + var n = n.skipConv + if n.kind in nkSymChoices: + for x in n: + if x.sym.kind in {skProc, skMethod, skConverter, skIterator}: + performProcvarCheck(c, n.info, x.sym) + elif n.kind == nkSym and n.sym.kind in {skProc, skMethod, skConverter, skIterator}: - performProcvarCheck(c, n, n.sym) + performProcvarCheck(c, n.info, n.sym) proc semProc(c: PContext, n: PNode): PNode |