diff options
author | Zahary Karadjov <zahary@gmail.com> | 2017-04-14 15:01:27 +0300 |
---|---|---|
committer | Zahary Karadjov <zahary@gmail.com> | 2017-04-14 23:48:43 +0300 |
commit | 8de19a7f4c5387042994e061aa28545b090b3997 (patch) | |
tree | ce5842611c8a7a5f04568aeb64a26c655951ad7c | |
parent | 03770daba44fb9ac5c21729d0b32cda10f8767bd (diff) | |
download | Nim-8de19a7f4c5387042994e061aa28545b090b3997.tar.gz |
fix a parsing regression (do is still mandatory in some situations)
-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]) + |