diff options
author | Simon Hafner <hafnersimon@gmail.com> | 2015-02-01 05:28:35 -0600 |
---|---|---|
committer | Simon Hafner <hafnersimon@gmail.com> | 2015-02-01 05:28:35 -0600 |
commit | a1d813d12cf04207a07e27e20751d5db053bb029 (patch) | |
tree | ebb6afcbd43c404088f0da92514ae0915919bf63 | |
parent | 9bd72fc0d96c1ce2e0c162b446346ec0e39712e2 (diff) | |
download | Nim-a1d813d12cf04207a07e27e20751d5db053bb029.tar.gz |
added a warning for when result is shadowed #868
-rw-r--r-- | compiler/msgs.nim | 4 | ||||
-rw-r--r-- | compiler/semstmts.nim | 3 |
2 files changed, 6 insertions, 1 deletions
diff --git a/compiler/msgs.nim b/compiler/msgs.nim index 35a121769..e78414804 100644 --- a/compiler/msgs.nim +++ b/compiler/msgs.nim @@ -117,7 +117,8 @@ type warnDifferentHeaps, warnWriteToForeignHeap, warnUnsafeCode, warnEachIdentIsTuple, warnShadowIdent, warnProveInit, warnProveField, warnProveIndex, warnGcUnsafe, warnGcUnsafe2, - warnUninit, warnGcMem, warnDestructor, warnLockLevel, warnUser, + warnUninit, warnGcMem, warnDestructor, warnLockLevel, warnResultShadowed, + warnUser, hintSuccess, hintSuccessX, hintLineTooLong, hintXDeclaredButNotUsed, hintConvToBaseNotNeeded, hintConvFromXtoItselfNotNeeded, hintExprAlwaysX, hintQuitCalled, @@ -391,6 +392,7 @@ const warnGcMem: "'$1' uses GC'ed memory [GcMem]", warnDestructor: "usage of a type with a destructor in a non destructible context. This will become a compile time error in the future. [Destructor]", warnLockLevel: "$1 [LockLevel]", + warnResultShadowed: "Special variable 'result' is shadowed. [ResultShadowed]", warnUser: "$1 [User]", hintSuccess: "operation successful [Success]", hintSuccessX: "operation successful ($# lines compiled; $# sec total; $#) [SuccessX]", diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index 3fe3e40f0..e50a80bcf 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -396,6 +396,7 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode = elif tup.kind == tyTuple and def.kind == nkPar and a.kind == nkIdentDefs and a.len > 3: message(a.info, warnEachIdentIsTuple) + for j in countup(0, length-3): var v = semIdentDef(c, a.sons[j], symkind) if sfGenSym notin v.flags: addInterfaceDecl(c, v) @@ -405,6 +406,8 @@ proc semVarOrLet(c: PContext, n: PNode, symkind: TSymKind): PNode = let shadowed = findShadowedVar(c, v) if shadowed != nil: shadowed.flags.incl(sfShadowed) + if shadowed.kind == skResult: + message(a.info, warnResultShadowed) # a shadowed variable is an error unless it appears on the right # side of the '=': if warnShadowIdent in gNotes and not identWithin(def, v.name): |