diff options
author | Zahary Karadjov <zahary@gmail.com> | 2016-08-24 00:07:22 +0300 |
---|---|---|
committer | Zahary Karadjov <zahary@gmail.com> | 2017-03-24 16:59:47 +0200 |
commit | 9e9b289fc5c3655550f75f7be47908cb81a3f49d (patch) | |
tree | 51962d07def3f5f74d2426ffdf277bde76c29e20 /compiler | |
parent | 74a80988d9289e8147a791c4b0939d4287baaff3 (diff) | |
download | Nim-9e9b289fc5c3655550f75f7be47908cb81a3f49d.tar.gz |
when displaying proc signatures, don't render the implicit generic params
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/renderer.nim | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/compiler/renderer.nim b/compiler/renderer.nim index badcaea66..7d9536625 100644 --- a/compiler/renderer.nim +++ b/compiler/renderer.nim @@ -34,6 +34,7 @@ type pendingWhitespace: int comStack*: seq[PNode] # comment stack flags*: TRenderFlags + inGenericParams: bool checkAnon: bool # we're in a context that can contain sfAnon inPragma: int @@ -83,7 +84,7 @@ proc initSrcGen(g: var TSrcGen, renderFlags: TRenderFlags) = g.flags = renderFlags g.pendingNL = -1 g.pendingWhitespace = -1 - g.checkAnon = false + g.inGenericParams = false proc addTok(g: var TSrcGen, kind: TTokType, s: string) = var length = len(g.tokens) @@ -692,14 +693,14 @@ proc gproc(g: var TSrcGen, n: PNode) = if n.sons[patternPos].kind != nkEmpty: gpattern(g, n.sons[patternPos]) - let oldCheckAnon = g.checkAnon - g.checkAnon = true + let oldInGenericParams = g.inGenericParams + g.inGenericParams = true if renderNoBody in g.flags and n[miscPos].kind != nkEmpty and n[miscPos][1].kind != nkEmpty: gsub(g, n[miscPos][1]) else: gsub(g, n.sons[genericParamsPos]) - g.checkAnon = oldCheckAnon + g.inGenericParams = oldInGenericParams gsub(g, n.sons[paramsPos]) gsub(g, n.sons[pragmasPos]) if renderNoBody notin g.flags: @@ -765,7 +766,10 @@ proc gasm(g: var TSrcGen, n: PNode) = gsub(g, n.sons[1]) proc gident(g: var TSrcGen, n: PNode) = - if g.checkAnon and n.kind == nkSym and sfAnon in n.sym.flags: return + if g.inGenericParams and n.kind == nkSym: + if sfAnon in n.sym.flags or + (n.typ != nil and tfImplicitTypeParam in n.typ.flags): return + var t: TTokType var s = atom(n) if (s[0] in lexer.SymChars): @@ -1315,9 +1319,16 @@ proc gsub(g: var TSrcGen, n: PNode, c: TContext) = gcoms(g) gstmts(g, lastSon(n), c) of nkGenericParams: - put(g, tkBracketLe, "[") - gcomma(g, n) - put(g, tkBracketRi, "]") + proc hasExplicitParams(gp: PNode): bool = + for p in gp: + if p.typ == nil or tfImplicitTypeParam notin p.typ.flags: + return true + return false + + if n.hasExplicitParams: + put(g, tkBracketLe, "[") + gcomma(g, n) + put(g, tkBracketRi, "]") of nkFormalParams: put(g, tkParLe, "(") gsemicolon(g, n, 1) |