Stop replacing all pragmas of a function with asyncjs

This commit is contained in:
Alexander Ivanov
2018-03-03 16:53:28 +02:00
parent 4164ec4f8b
commit 3bffbf5a4d
2 changed files with 33 additions and 1 deletions

View File

@@ -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 =

View File

@@ -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()