From 0440aea69158dfde7e315d547f8f2ed474a705c0 Mon Sep 17 00:00:00 2001 From: Araq Date: Thu, 16 Feb 2017 21:30:54 +0100 Subject: fixes #5405 --- compiler/sem.nim | 10 ---------- compiler/semdata.nim | 20 ++++++++++++++++++++ compiler/sigmatch.nim | 2 ++ 3 files changed, 22 insertions(+), 10 deletions(-) (limited to 'compiler') diff --git a/compiler/sem.nim b/compiler/sem.nim index 961d9fa75..fc7736b07 100644 --- a/compiler/sem.nim +++ b/compiler/sem.nim @@ -168,16 +168,6 @@ proc commonType*(x, y: PType): PType = proc newSymS(kind: TSymKind, n: PNode, c: PContext): PSym = result = newSym(kind, considerQuotedIdent(n), getCurrOwner(), n.info) -proc getGenSym(c: PContext; s: PSym): PSym = - var it = c.p - while it != nil: - result = get(it, s) - if result != nil: - #echo "got from table ", result.name.s, " ", result.info - return result - it = it.next - result = s - proc newSymG*(kind: TSymKind, n: PNode, c: PContext): PSym = proc `$`(kind: TSymKind): string = substr(system.`$`(kind), 2).toLowerAscii diff --git a/compiler/semdata.nim b/compiler/semdata.nim index 845efd25a..77a530a15 100644 --- a/compiler/semdata.nim +++ b/compiler/semdata.nim @@ -157,6 +157,26 @@ proc get*(p: PProcCon; key: PSym): PSym = if p.mapping.data == nil: return nil result = PSym(p.mapping.idTableGet(key)) +proc getGenSym*(c: PContext; s: PSym): PSym = + if sfGenSym notin s.flags: return s + var it = c.p + while it != nil: + result = get(it, s) + if result != nil: + #echo "got from table ", result.name.s, " ", result.info + return result + it = it.next + result = s + +proc considerGenSyms*(c: PContext; n: PNode) = + if n.kind == nkSym: + let s = getGenSym(c, n.sym) + if n.sym != s: + n.sym = s + else: + for i in 0..