summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/js/asyncjs.nim7
-rw-r--r--tests/js/tasync_pragma.nim27
2 files changed, 33 insertions, 1 deletions
diff --git a/lib/js/asyncjs.nim b/lib/js/asyncjs.nim
index 62444e49a..20f7b2300 100644
--- a/lib/js/asyncjs.nim
+++ b/lib/js/asyncjs.nim
@@ -129,8 +129,13 @@ proc generateJsasync(arg: NimNode): NimNode =
       return `jsResolve`
     result.body.add(voidFix)
 
-  result.pragma = quote:
+  let asyncPragma = quote:
     {.codegenDecl: "async function $2($3)".}
+  if arg.pragma.kind == nnkEmpty:
+    result.pragma = asyncPragma
+  else:
+    result.pragma = arg.pragma
+    result.pragma.add(asyncPragma[0])  
 
 
 macro async*(arg: untyped): untyped =
diff --git a/tests/js/tasync_pragma.nim b/tests/js/tasync_pragma.nim
new file mode 100644
index 000000000..a16e94657
--- /dev/null
+++ b/tests/js/tasync_pragma.nim
@@ -0,0 +1,27 @@
+discard """
+  output: '''
+0
+t
+'''
+"""
+
+import asyncjs, macros
+
+macro f*(a: untyped): untyped =
+  assert a.kind == nnkProcDef
+  result = nnkProcDef.newTree(a.name, a[1], a[2], a.params, a.pragma, a[5], nnkStmtList.newTree())
+  let call = quote:
+    echo 0
+  result.body.add(call)
+  for child in a.body:
+    result.body.add(child)
+  echo result.body.repr
+
+proc t* {.async, f.} =
+  echo "t"
+
+proc t0* {.async.} =
+  await t()
+
+discard t0()
+