summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDominik Picheta <dominikpicheta@gmail.com>2017-05-17 20:05:21 +0100
committerDominik Picheta <dominikpicheta@gmail.com>2017-05-17 20:05:21 +0100
commitb2e649c09368edd2de59288c2a3c3096599c5fbe (patch)
treef9262cd1c80d1b0fd4866c073c01a7b07f94b693
parentd1daccac2f9b9885f9c70ce52c10156d8b13b29c (diff)
downloadNim-b2e649c09368edd2de59288c2a3c3096599c5fbe.tar.gz
Fixes regression introduced by #5739. Improves newNimNode proc.
-rw-r--r--lib/core/macros.nim8
-rw-r--r--lib/pure/asyncmacro.nim2
2 files changed, 8 insertions, 2 deletions
diff --git a/lib/core/macros.nim b/lib/core/macros.nim
index 83776f16b..03ac09180 100644
--- a/lib/core/macros.nim
+++ b/lib/core/macros.nim
@@ -225,7 +225,13 @@ proc `ident=`*(n: NimNode, val: NimIdent) {.magic: "NSetIdent", noSideEffect.}
 proc `strVal=`*(n: NimNode, val: string) {.magic: "NSetStrVal", noSideEffect.}
 
 proc newNimNode*(kind: NimNodeKind,
-                 n: NimNode=nil): NimNode {.magic: "NNewNimNode", noSideEffect.}
+                 lineInfoFrom: NimNode=nil): NimNode
+  {.magic: "NNewNimNode", noSideEffect.}
+  ## Creates a new AST node of the specified kind.
+  ##
+  ## The ``lineInfoFrom`` parameter is used for line information when the
+  ## produced code crashes. You should ensure that it is set to a node that
+  ## you are transforming.
 
 proc copyNimNode*(n: NimNode): NimNode {.magic: "NCopyNimNode", noSideEffect.}
 proc copyNimTree*(n: NimNode): NimNode {.magic: "NCopyNimTree", noSideEffect.}
diff --git a/lib/pure/asyncmacro.nim b/lib/pure/asyncmacro.nim
index 9a9bef8c0..a104478ac 100644
--- a/lib/pure/asyncmacro.nim
+++ b/lib/pure/asyncmacro.nim
@@ -377,7 +377,7 @@ proc asyncSingleProc(prc: NimNode): NimNode {.compileTime.} =
 
     var closureIterator = newProc(iteratorNameSym, [newIdentNode("FutureBase")],
                                   procBody, nnkIteratorDef)
-    closureIterator.pragma = copyNimTree(prc.pragma)
+    closureIterator.pragma = newNimNode(nnkPragma, lineInfoFrom=prc.body)
     closureIterator.addPragma(newIdentNode("closure"))
     closureIterator.addPragma(newIdentNode("gcsafe"))
     outerProcBody.add(closureIterator)