diff --git a/compiler/ast.nim b/compiler/ast.nim index 00e4b3bdab..5f3ce2613d 100644 --- a/compiler/ast.nim +++ b/compiler/ast.nim @@ -1285,8 +1285,7 @@ proc getStrOrChar*(a: PNode): string = proc isGenericRoutine*(s: PSym): bool = case s.kind of skProc, skTemplate, skMacro, skIterator, skMethod, skConverter: - result = sfFromGeneric in s.flags or - (s.ast != nil and s.ast[genericParamsPos].kind != nkEmpty) + result = sfFromGeneric in s.flags else: nil proc isRoutine*(s: PSym): bool {.inline.} = diff --git a/compiler/lambdalifting.nim b/compiler/lambdalifting.nim index 9a40b350e1..163ea41362 100644 --- a/compiler/lambdalifting.nim +++ b/compiler/lambdalifting.nim @@ -220,7 +220,7 @@ proc getHiddenParam(routine: PSym): PSym = proc isInnerProc(s, outerProc: PSym): bool {.inline.} = result = s.kind in {skProc, skMethod, skConverter} and - s.owner == outerProc + s.owner == outerProc and not isGenericRoutine(s) #s.typ.callConv == ccClosure proc addClosureParam(i: PInnerContext, e: PEnv) = diff --git a/compiler/seminst.nim b/compiler/seminst.nim index 15be332610..ed842d98ef 100644 --- a/compiler/seminst.nim +++ b/compiler/seminst.nim @@ -91,8 +91,17 @@ proc instantiateBody(c: PContext, n: PNode, result: PSym) = addDecl(c, result) pushProcCon(c, result) # add params to scope - for i in 1 ..