summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAlexander Ivanov <alehander42@gmail.com>2017-12-19 20:50:37 +0200
committerAlexander Ivanov <alehander42@gmail.com>2017-12-19 20:50:37 +0200
commitb3dfc93beee2ac47a907ea77c1ed2da84ba4b672 (patch)
treeda07ac7c76b7a2d91b69b5bf40ac795ee92c3392
parent7f6afa9e9b554799cf9a39d0f8cc7d35e47a2cb4 (diff)
downloadNim-b3dfc93beee2ac47a907ea77c1ed2da84ba4b672.tar.gz
Fix forward
-rw-r--r--lib/js/asyncjs.nim31
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