diff options
author | Yuriy Glukhov <yuriy.glukhov@gmail.com> | 2017-06-18 00:52:56 +0300 |
---|---|---|
committer | Yuriy Glukhov <yuriy.glukhov@gmail.com> | 2017-06-18 00:57:05 +0300 |
commit | 58eae1171ddce623e44257ea3929969f5099f5db (patch) | |
tree | 9ee5baad0b3f8a69a5f510fdad12c726eb4c7ab7 | |
parent | d9477535230a0f32f8ee7a2d0cdd28d8fea2121b (diff) | |
download | Nim-58eae1171ddce623e44257ea3929969f5099f5db.tar.gz |
Fixes #5995
-rw-r--r-- | compiler/semstmts.nim | 2 | ||||
-rw-r--r-- | lib/pure/asyncmacro.nim | 2 | ||||
-rw-r--r-- | tests/async/tlambda.nim | 3 |
3 files changed, 5 insertions, 2 deletions
diff --git a/compiler/semstmts.nim b/compiler/semstmts.nim index 576f2695b..7ea7763c3 100644 --- a/compiler/semstmts.nim +++ b/compiler/semstmts.nim @@ -1129,7 +1129,7 @@ proc semProcAnnotation(c: PContext, prc: PNode; x.add(it.sons[1]) x.add(prc) # recursion assures that this works for multiple macro annotations too: - result = semStmt(c, x) + result = semExpr(c, x) # since a proc annotation can set pragmas, we process these here again. # This is required for SqueakNim-like export pragmas. if result.kind in procDefs and result[namePos].kind == nkSym and diff --git a/lib/pure/asyncmacro.nim b/lib/pure/asyncmacro.nim index a104478ac..89b216b25 100644 --- a/lib/pure/asyncmacro.nim +++ b/lib/pure/asyncmacro.nim @@ -301,7 +301,7 @@ proc verifyReturnType(typeName: string) {.compileTime.} = proc asyncSingleProc(prc: NimNode): NimNode {.compileTime.} = ## This macro transforms a single procedure into a closure iterator. ## The ``async`` macro supports a stmtList holding multiple async procedures. - if prc.kind notin {nnkProcDef, nnkLambda, nnkMethodDef}: + if prc.kind notin {nnkProcDef, nnkLambda, nnkMethodDef, nnkDo}: error("Cannot transform this node kind into an async proc." & " proc/method definition or lambda node expected.") diff --git a/tests/async/tlambda.nim b/tests/async/tlambda.nim index e0ff1f483..d187c0d50 100644 --- a/tests/async/tlambda.nim +++ b/tests/async/tlambda.nim @@ -51,5 +51,8 @@ proc main() = var builder = newBuilder() + # Test {.async.} pragma with do notation: #5995 + builder.client = newClient("builder") do(client: Client, msg: JsonNode) {.async.}: + await onMessage(builder, msg) main() |