diff options
-rw-r--r-- | compiler/parser.nim | 5 | ||||
-rw-r--r-- | tests/parser/tpostexprblocks.nim | 16 |
2 files changed, 20 insertions, 1 deletions
diff --git a/compiler/parser.nim b/compiler/parser.nim index 2607d2e3d..e4c04c0f7 100644 --- a/compiler/parser.nim +++ b/compiler/parser.nim @@ -68,6 +68,7 @@ proc parseCase(p: var TParser): PNode proc parseStmtPragma(p: var TParser): PNode proc parsePragma(p: var TParser): PNode proc postExprBlocks(p: var TParser, x: PNode): PNode +proc parseExprStmt(p: var TParser): PNode # implementation proc getTok(p: var TParser) = @@ -523,7 +524,9 @@ proc parsePar(p: var TParser): PNode = result.add(parseStmtPragma(p)) elif p.tok.tokType != tkParRi: var a = simpleExpr(p) - if p.tok.tokType == tkEquals: + if p.tok.tokType == tkDo: + result = postExprBlocks(p, a) + elif p.tok.tokType == tkEquals: # special case: allow assignments let asgn = newNodeP(nkAsgn, p) getTok(p) diff --git a/tests/parser/tpostexprblocks.nim b/tests/parser/tpostexprblocks.nim index b7f97785b..85f2628bf 100644 --- a/tests/parser/tpostexprblocks.nim +++ b/tests/parser/tpostexprblocks.nim @@ -371,6 +371,17 @@ StmtList StmtList DiscardStmt Empty + Call + DotExpr + Ident !"result" + Ident !"add" + BracketExpr + Call + Ident !"quote" + StmtList + DiscardStmt + Empty + IntLit 0 ''' """ @@ -495,3 +506,8 @@ dumpTree: else: discard + # some edge cases + result.add((quote do: + discard + )[0]) + |