summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@googlemail.com>2015-03-11 13:17:04 +0000
committerDominik Picheta <dominikpicheta@googlemail.com>2015-03-11 13:17:04 +0000
commit4924f5b14a4cdef412cb4b809a9fa81d3b58be98 (patch)
treeaecc51d3372bcfcbe3b8b42ef8aa6a760247d451
parentfd51c1c984789d0e198a3586a0366100b0082e75 (diff)
parenta4009e32ead7983e508bc2c7858b37cb31a65868 (diff)
downloadNim-4924f5b14a4cdef412cb4b809a9fa81d3b58be98.tar.gz
Merge pull request #2311 from def-/result-macros
Get rid of 'result shadowed' warning for async procs
-rw-r--r--lib/pure/asyncdispatch.nim13
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/pure/asyncdispatch.nim b/lib/pure/asyncdispatch.nim
index bf905ed49..a8caf809e 100644
--- a/lib/pure/asyncdispatch.nim
+++ b/lib/pure/asyncdispatch.nim
@@ -1323,14 +1323,25 @@ macro async*(prc: stmt): stmt {.immediate.} =
       newLit(prc[0].getName)))) # Get type from return type of this proc
 
   # -> iterator nameIter(): FutureBase {.closure.} =
+  # ->   {.push warning[resultshadowed]: off.}
   # ->   var result: T
+  # ->   {.pop.}
   # ->   <proc_body>
   # ->   complete(retFuture, result)
   var iteratorNameSym = genSym(nskIterator, $prc[0].getName & "Iter")
   var procBody = prc[6].processBody(retFutureSym, subtypeIsVoid, nil)
   if not subtypeIsVoid:
-    procBody.insert(0, newNimNode(nnkVarSection, prc[6]).add(
+    procBody.insert(0, newNimNode(nnkPragma).add(newIdentNode("push"),
+      newNimNode(nnkExprColonExpr).add(newNimNode(nnkBracketExpr).add(
+        newIdentNode("warning"), newIdentNode("resultshadowed")),
+      newIdentNode("off")))) # -> {.push warning[resultshadowed]: off.}
+
+    procBody.insert(1, newNimNode(nnkVarSection, prc[6]).add(
       newIdentDefs(newIdentNode("result"), returnType[1]))) # -> var result: T
+
+    procBody.insert(2, newNimNode(nnkPragma).add(
+      newIdentNode("pop"))) # -> {.pop.})
+
     procBody.add(
       newCall(newIdentNode("complete"),
         retFutureSym, newIdentNode("result"))) # -> complete(retFuture, result)