diff options
author | Yuriy Glukhov <yuriy.glukhov@gmail.com> | 2018-06-07 19:14:14 +0300 |
---|---|---|
committer | Yuriy Glukhov <yuriy.glukhov@gmail.com> | 2018-06-07 19:14:14 +0300 |
commit | 60b9c9dc1f4a45afe2813abc4234766019862549 (patch) | |
tree | 0ce1b2c3f4a3482d85c7064269897e7f103ed6a4 | |
parent | cc63351a5a44ff5793195b59d961bc93257d879d (diff) | |
download | Nim-60b9c9dc1f4a45afe2813abc4234766019862549.tar.gz |
Fixes #7985
-rw-r--r-- | compiler/closureiters.nim | 17 | ||||
-rw-r--r-- | tests/async/t7985.nim | 19 |
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()) |