From 60b9c9dc1f4a45afe2813abc4234766019862549 Mon Sep 17 00:00:00 2001 From: Yuriy Glukhov Date: Thu, 7 Jun 2018 19:14:14 +0300 Subject: [PATCH] Fixes #7985 --- compiler/closureiters.nim | 21 ++++++++++----------- tests/async/t7985.nim | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 tests/async/t7985.nim 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) - - var parent = n - var lastSon = n[^1] - - while lastSon.kind == nkStmtListExpr: - parent = lastSon - lastSon = lastSon[^1] - 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 + result.s.sons = @[] + + 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] + + result.res = n + 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())