diff options
-rw-r--r-- | lib/js/asyncjs.nim | 7 | ||||
-rw-r--r-- | tests/js/tasync_pragma.nim | 27 |
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() + |