diff --git a/compiler/docgen.nim b/compiler/docgen.nim
index 5104ad0707..94d65ba51e 100644
--- a/compiler/docgen.nim
+++ b/compiler/docgen.nim
@@ -717,7 +717,7 @@ proc complexName(k: TSymKind, n: PNode, baseName: string): string =
of skTemplate: result.add(".t")
of skConverter: result.add(".c")
else: discard
- if n.len > paramsPos and n[paramsPos].kind == nkFormalParams:
+ if n.safeLen > paramsPos and n[paramsPos].kind == nkFormalParams:
let params = renderParamTypes(n[paramsPos])
if params.len > 0:
result.add(defaultParamSeparator)
@@ -966,13 +966,17 @@ proc exportSym(d: PDoc; s: PSym) =
elif s.kind != skModule and s.owner != nil:
let module = originatingModule(s)
if belongsToPackage(d.conf, module):
- let external = externalDep(d, module)
+ let
+ complexSymbol = complexName(s.kind, s.ast, s.name.s)
+ symbolOrIdRope = rope(d.newUniquePlainSymbol(complexSymbol))
+ external = externalDep(d, module)
if d.section[k] != nil: d.section[k].add(", ")
# XXX proper anchor generation here
dispA(d.conf, d.section[k],
- "$1",
+ "$1",
"$1", [rope esc(d.target, s.name.s),
- rope changeFileExt(external, "html")])
+ rope changeFileExt(external, "html"),
+ symbolOrIdRope])
proc documentNewEffect(cache: IdentCache; n: PNode): PNode =
let s = n[namePos].sym
@@ -1075,7 +1079,7 @@ proc generateDoc*(d: PDoc, n, orig: PNode, docFlags: DocFlags = kDefault) =
if it.kind == nkSym:
if d.module != nil and d.module == it.sym.owner:
generateDoc(d, it.sym.ast, orig, kForceExport)
- else:
+ elif it.sym.ast != nil:
exportSym(d, it.sym)
of nkExportExceptStmt: discard "transformed into nkExportStmt by semExportExcept"
of nkFromStmt, nkImportExceptStmt: traceDeps(d, n[0])