diff options
author | Alexander Ivanov <alehander42@gmail.com> | 2017-12-19 20:50:37 +0200 |
---|---|---|
committer | Alexander Ivanov <alehander42@gmail.com> | 2017-12-19 20:50:37 +0200 |
commit | b3dfc93beee2ac47a907ea77c1ed2da84ba4b672 (patch) | |
tree | da07ac7c76b7a2d91b69b5bf40ac795ee92c3392 | |
parent | 7f6afa9e9b554799cf9a39d0f8cc7d35e47a2cb4 (diff) | |
download | Nim-b3dfc93beee2ac47a907ea77c1ed2da84ba4b672.tar.gz |
Fix forward
-rw-r--r-- | lib/js/asyncjs.nim | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/lib/js/asyncjs.nim b/lib/js/asyncjs.nim index 73dbfb1e7..c99170a49 100644 --- a/lib/js/asyncjs.nim +++ b/lib/js/asyncjs.nim @@ -92,33 +92,37 @@ proc generateJsasync(arg: NimNode): NimNode = assert arg.kind == nnkProcDef result = arg var isVoid = false + var jsResolveNode = ident("jsResolve") + if arg.params[0].kind == nnkEmpty: result.params[0] = nnkBracketExpr.newTree(ident("Future"), ident("void")) isVoid = true elif isFutureVoid(arg.params[0]): isVoid = true + var code = result.body replaceReturn(code) result.body = nnkStmtList.newTree() - var awaitFunction = quote: - proc await[T](f: Future[T]): T {.importcpp: "(await #)".} - result.body.add(awaitFunction) + if len(code) > 0: + var awaitFunction = quote: + proc await[T](f: Future[T]): T {.importcpp: "(await #)".} + result.body.add(awaitFunction) - var resolve: NimNode - var jsResolveNode = ident("jsResolve") - if isVoid: - resolve = quote: - var `jsResolveNode` {.importcpp: "undefined".}: Future[void] + var resolve: NimNode + if isVoid: + resolve = quote: + var `jsResolveNode` {.importcpp: "undefined".}: Future[void] + else: + resolve = quote: + proc jsResolve[T](a: T): Future[T] {.importcpp: "#".} + result.body.add(resolve) else: - resolve = quote: - proc jsResolve[T](a: T): Future[T] {.importcpp: "#".} - result.body.add(resolve) - + result.body = newEmptyNode() for child in code: result.body.add(child) - if isVoid: + if len(code) > 0 and isVoid: var voidFix = quote: return `jsResolveNode` result.body.add(voidFix) @@ -126,6 +130,7 @@ proc generateJsasync(arg: NimNode): NimNode = result.pragma = quote: {.codegenDecl: "async function $2($3)".} + macro async*(arg: untyped): untyped = ## Macro which converts normal procedures into ## javascript-compatible async procedures |