summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorSimon Hafner <hafnersimon@gmail.com>2015-02-01 05:28:35 -0600
committerSimon Hafner <hafnersimon@gmail.com>2015-02-01 05:28:35 -0600
commita1d813d12cf04207a07e27e20751d5db053bb029 (patch)
treeebb6afcbd43c404088f0da92514ae0915919bf63
parent9bd72fc0d96c1ce2e0c162b446346ec0e39712e2 (diff)
downloadNim-a1d813d12cf04207a07e27e20751d5db053bb029.tar.gz
added a warning for when result is shadowed #868
-rw-r--r--compiler/msgs.nim4
-rw-r--r--compiler/semstmts.nim3
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):