summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorYuriy Glukhov <yuriy.glukhov@gmail.com>2018-06-07 19:14:14 +0300
committerYuriy Glukhov <yuriy.glukhov@gmail.com>2018-06-07 19:14:14 +0300
commit60b9c9dc1f4a45afe2813abc4234766019862549 (patch)
tree0ce1b2c3f4a3482d85c7064269897e7f103ed6a4
parentcc63351a5a44ff5793195b59d961bc93257d879d (diff)
downloadNim-60b9c9dc1f4a45afe2813abc4234766019862549.tar.gz
Fixes #7985
-rw-r--r--compiler/closureiters.nim17
-rw-r--r--tests/async/t7985.nim19
2 files changed, 27 insertions, 9 deletions
diff --git a/compiler/closureiters.nim b/compiler/closureiters.nim
index e8f4d62c1..5568fd37b 100644
--- a/compiler/closureiters.nim
+++ b/compiler/closureiters.nim
@@ -397,18 +397,17 @@ proc hasYieldsInExpressions(n: PNode): bool =
 
 proc exprToStmtList(n: PNode): tuple[s, res: PNode] =
   assert(n.kind == nkStmtListExpr)
+  result.s = newNodeI(nkStmtList, n.info)
+  result.s.sons = @[]
 
-  var parent = n
-  var lastSon = n[^1]
+  var n = n
+  while n.kind == nkStmtListExpr:
+    result.s.sons.add(n.sons)
+    result.s.sons.setLen(result.s.sons.len - 1) # delete last son
+    n = n[^1]
 
-  while lastSon.kind == nkStmtListExpr:
-    parent = lastSon
-    lastSon = lastSon[^1]
+  result.res = n
 
-  result.s = newNodeI(nkStmtList, n.info)
-  result.s.sons = parent.sons
-  result.s.sons.setLen(result.s.sons.len - 1) # delete last son
-  result.res = lastSon
 
 proc newEnvVarAsgn(ctx: Ctx, s: PSym, v: PNode): PNode =
   result = newTree(nkFastAsgn, ctx.newEnvVarAccess(s), v)
diff --git a/tests/async/t7985.nim b/tests/async/t7985.nim
new file mode 100644
index 000000000..0365499d3
--- /dev/null
+++ b/tests/async/t7985.nim
@@ -0,0 +1,19 @@
+discard """
+  file: "t7985.nim"
+  exitcode: 0
+  output: "(value: 1)"
+"""
+import json, asyncdispatch
+
+proc getData(): Future[JsonNode] {.async.} =
+  result = %*{"value": 1}
+
+type
+  MyData = object
+    value: BiggestInt
+
+proc main() {.async.} =
+  let data = to(await(getData()), MyData)
+  echo data
+
+waitFor(main())