when displaying proc signatures, don't render the implicit generic params
This commit is contained in:
parent
74a80988d9
commit
9e9b289fc5
1 changed files with 19 additions and 8 deletions
|
|
@ -34,6 +34,7 @@ type
|
||||||
pendingWhitespace: int
|
pendingWhitespace: int
|
||||||
comStack*: seq[PNode] # comment stack
|
comStack*: seq[PNode] # comment stack
|
||||||
flags*: TRenderFlags
|
flags*: TRenderFlags
|
||||||
|
inGenericParams: bool
|
||||||
checkAnon: bool # we're in a context that can contain sfAnon
|
checkAnon: bool # we're in a context that can contain sfAnon
|
||||||
inPragma: int
|
inPragma: int
|
||||||
|
|
||||||
|
|
@ -83,7 +84,7 @@ proc initSrcGen(g: var TSrcGen, renderFlags: TRenderFlags) =
|
||||||
g.flags = renderFlags
|
g.flags = renderFlags
|
||||||
g.pendingNL = -1
|
g.pendingNL = -1
|
||||||
g.pendingWhitespace = -1
|
g.pendingWhitespace = -1
|
||||||
g.checkAnon = false
|
g.inGenericParams = false
|
||||||
|
|
||||||
proc addTok(g: var TSrcGen, kind: TTokType, s: string) =
|
proc addTok(g: var TSrcGen, kind: TTokType, s: string) =
|
||||||
var length = len(g.tokens)
|
var length = len(g.tokens)
|
||||||
|
|
@ -692,14 +693,14 @@ proc gproc(g: var TSrcGen, n: PNode) =
|
||||||
|
|
||||||
if n.sons[patternPos].kind != nkEmpty:
|
if n.sons[patternPos].kind != nkEmpty:
|
||||||
gpattern(g, n.sons[patternPos])
|
gpattern(g, n.sons[patternPos])
|
||||||
let oldCheckAnon = g.checkAnon
|
let oldInGenericParams = g.inGenericParams
|
||||||
g.checkAnon = true
|
g.inGenericParams = true
|
||||||
if renderNoBody in g.flags and n[miscPos].kind != nkEmpty and
|
if renderNoBody in g.flags and n[miscPos].kind != nkEmpty and
|
||||||
n[miscPos][1].kind != nkEmpty:
|
n[miscPos][1].kind != nkEmpty:
|
||||||
gsub(g, n[miscPos][1])
|
gsub(g, n[miscPos][1])
|
||||||
else:
|
else:
|
||||||
gsub(g, n.sons[genericParamsPos])
|
gsub(g, n.sons[genericParamsPos])
|
||||||
g.checkAnon = oldCheckAnon
|
g.inGenericParams = oldInGenericParams
|
||||||
gsub(g, n.sons[paramsPos])
|
gsub(g, n.sons[paramsPos])
|
||||||
gsub(g, n.sons[pragmasPos])
|
gsub(g, n.sons[pragmasPos])
|
||||||
if renderNoBody notin g.flags:
|
if renderNoBody notin g.flags:
|
||||||
|
|
@ -765,7 +766,10 @@ proc gasm(g: var TSrcGen, n: PNode) =
|
||||||
gsub(g, n.sons[1])
|
gsub(g, n.sons[1])
|
||||||
|
|
||||||
proc gident(g: var TSrcGen, n: PNode) =
|
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 t: TTokType
|
||||||
var s = atom(n)
|
var s = atom(n)
|
||||||
if (s[0] in lexer.SymChars):
|
if (s[0] in lexer.SymChars):
|
||||||
|
|
@ -1315,6 +1319,13 @@ proc gsub(g: var TSrcGen, n: PNode, c: TContext) =
|
||||||
gcoms(g)
|
gcoms(g)
|
||||||
gstmts(g, lastSon(n), c)
|
gstmts(g, lastSon(n), c)
|
||||||
of nkGenericParams:
|
of nkGenericParams:
|
||||||
|
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, "[")
|
put(g, tkBracketLe, "[")
|
||||||
gcomma(g, n)
|
gcomma(g, n)
|
||||||
put(g, tkBracketRi, "]")
|
put(g, tkBracketRi, "]")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue