From cf09ef47b85363554a3475413481b4f513ef77ae Mon Sep 17 00:00:00 2001 From: nc-x Date: Sat, 17 Aug 2019 14:05:25 +0530 Subject: [PATCH] Remove duplicate line number from 'invalid forward declaration' error (#11966) --- compiler/procfind.nim | 4 ++-- compiler/types.nim | 9 +++++---- tests/modules/tmismatchedvisibility.nim | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/compiler/procfind.nim b/compiler/procfind.nim index 55c8bb78cd..f2f58fb756 100644 --- a/compiler/procfind.nim +++ b/compiler/procfind.nim @@ -72,8 +72,8 @@ proc searchForProcNew(c: PContext, scope: PScope, fn: PSym): PSym = of paramsEqual: if (sfExported notin result.flags) and (sfExported in fn.flags): let message = ("public implementation '$1' has non-public " & - "forward declaration in $2") % - [getProcHeader(c.config, result), c.config$result.info] + "forward declaration at $2") % + [getProcHeader(c.config, result, getDeclarationPath = false), c.config$result.info] localError(c.config, fn.info, message) return of paramsIncompatible: diff --git a/compiler/types.nim b/compiler/types.nim index 11006de309..61fbffd60e 100644 --- a/compiler/types.nim +++ b/compiler/types.nim @@ -119,7 +119,7 @@ proc isIntLit*(t: PType): bool {.inline.} = proc isFloatLit*(t: PType): bool {.inline.} = result = t.kind == tyFloat and t.n != nil and t.n.kind == nkFloatLit -proc getProcHeader*(conf: ConfigRef; sym: PSym; prefer: TPreferedDesc = preferName): string = +proc getProcHeader*(conf: ConfigRef; sym: PSym; prefer: TPreferedDesc = preferName; getDeclarationPath = true): string = assert sym != nil result = sym.owner.name.s & '.' & sym.name.s if sym.kind in routineKinds: @@ -137,9 +137,10 @@ proc getProcHeader*(conf: ConfigRef; sym: PSym; prefer: TPreferedDesc = preferNa add(result, ')') if n.sons[0].typ != nil: result.add(": " & typeToString(n.sons[0].typ, prefer)) - result.add " [declared in " - result.add(conf$sym.info) - result.add "]" + if getDeclarationPath: + result.add " [declared in " + result.add(conf$sym.info) + result.add "]" proc elemType*(t: PType): PType = assert(t != nil) diff --git a/tests/modules/tmismatchedvisibility.nim b/tests/modules/tmismatchedvisibility.nim index a61b280716..b649a5a3ee 100644 --- a/tests/modules/tmismatchedvisibility.nim +++ b/tests/modules/tmismatchedvisibility.nim @@ -1,5 +1,5 @@ discard """ - errormsg: "public implementation 'tmismatchedvisibility.foo(a: int) [declared in tmismatchedvisibility.nim(6, 6)]' has non-public forward declaration in " + errormsg: "public implementation 'tmismatchedvisibility.foo(a: int)' has non-public forward declaration at " line: 8 """