new 'var T' error messages with hyperlinks; closes #7373

This commit is contained in:
Andreas Rumpf 2018-04-22 00:12:43 +02:00
commit 07f4e8a4ed
2 changed files with 7 additions and 4 deletions

View file

@ -10,6 +10,9 @@
import import
options, strutils, os, tables, ropes, platform, terminal, macros options, strutils, os, tables, ropes, platform, terminal, macros
const
explanationsBaseUrl* = "https://nim-lang.org/docs/manual"
type type
TMsgKind* = enum TMsgKind* = enum
errUnknown, errInternal, errIllFormedAstX, errCannotOpenFile, errGenerated, errUnknown, errInternal, errIllFormedAstX, errCannotOpenFile, errGenerated,

View file

@ -1342,11 +1342,11 @@ proc takeImplicitAddr(c: PContext, n: PNode; isLent: bool): PNode =
let root = exprRoot(n) let root = exprRoot(n)
if root != nil and root.owner == c.p.owner: if root != nil and root.owner == c.p.owner:
if root.kind in {skLet, skVar, skTemp} and sfGlobal notin root.flags: if root.kind in {skLet, skVar, skTemp} and sfGlobal notin root.flags:
localError(n.info, "'$1' escapes its stack frame; context: '$2'" % [ localError(n.info, "'$1' escapes its stack frame; context: '$2'; see $3/var_t_return.html" % [
root.name.s, renderTree(n, {renderNoComments})]) root.name.s, renderTree(n, {renderNoComments}), explanationsBaseUrl])
elif root.kind == skParam and root.position != 0: elif root.kind == skParam and root.position != 0:
localError(n.info, "'$1' is not the first parameter; context: '$2'" % [ localError(n.info, "'$1' is not the first parameter; context: '$2'; see $3/var_t_return.html" % [
root.name.s, renderTree(n, {renderNoComments})]) root.name.s, renderTree(n, {renderNoComments}), explanationsBaseUrl])
case n.kind case n.kind
of nkHiddenAddr, nkAddr: return n of nkHiddenAddr, nkAddr: return n
of nkHiddenDeref, nkDerefExpr: return n.sons[0] of nkHiddenDeref, nkDerefExpr: return n.sons[0]