summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/parser.nim5
-rw-r--r--tests/parser/tpostexprblocks.nim16
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])
+