From d89a20cc1d1ddc497807825c1a80597630e7fa63 Mon Sep 17 00:00:00 2001 From: Araq Date: Sat, 11 Apr 2015 02:28:06 +0200 Subject: [PATCH] fixes #2509 --- compiler/renderer.nim | 1 + compiler/seminst.nim | 5 ++++- compiler/sempass2.nim | 2 +- compiler/semtypinst.nim | 8 ++++++++ tests/generics/twrong_generic_object.nim | 21 +++++++++++++++++++++ tests/objects/trefobjsyntax2.nim | 19 +++++++++++++++++++ 6 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 tests/generics/twrong_generic_object.nim create mode 100644 tests/objects/trefobjsyntax2.nim diff --git a/compiler/renderer.nim b/compiler/renderer.nim index ce818e3cd..ffdb60696 100644 --- a/compiler/renderer.nim +++ b/compiler/renderer.nim @@ -503,6 +503,7 @@ proc gsub(g: var TSrcGen, n: PNode) = proc hasCom(n: PNode): bool = result = false + if n.isNil: return false if n.comment != nil: return true case n.kind of nkEmpty..nkNilLit: discard diff --git a/compiler/seminst.nim b/compiler/seminst.nim index dc36ecf34..f72e2dc5b 100644 --- a/compiler/seminst.nim +++ b/compiler/seminst.nim @@ -176,7 +176,9 @@ proc instantiateProcType(c: PContext, pt: TIdTable, for i in 1 .. 1: resetIdTable(cl.symMap) + if i > 1: + resetIdTable(cl.symMap) + resetIdTable(cl.localCache) result.sons[i] = replaceTypeVarsT(cl, result.sons[i]) propagateToOwner(result, result.sons[i]) internalAssert originalParams[i].kind == nkSym @@ -196,6 +198,7 @@ proc instantiateProcType(c: PContext, pt: TIdTable, addDecl(c, result.n.sons[i].sym) resetIdTable(cl.symMap) + resetIdTable(cl.localCache) result.sons[0] = replaceTypeVarsT(cl, result.sons[0]) result.n.sons[0] = originalParams[0].copyTree diff --git a/compiler/sempass2.nim b/compiler/sempass2.nim index 6928dbaf4..5a243afa0 100644 --- a/compiler/sempass2.nim +++ b/compiler/sempass2.nim @@ -764,7 +764,7 @@ proc track(tracked: PEffects, n: PNode) = setLen(tracked.locked, oldLocked) tracked.currLockLevel = oldLockLevel of nkTypeSection, nkProcDef, nkConverterDef, nkMethodDef, nkIteratorDef, - nkMacroDef, nkTemplateDef: + nkMacroDef, nkTemplateDef, nkLambda, nkDo: discard else: for i in 0 ..