summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorZahary Karadjov <zahary@gmail.com>2017-04-14 15:01:27 +0300
committerZahary Karadjov <zahary@gmail.com>2017-04-14 23:48:43 +0300
commit8de19a7f4c5387042994e061aa28545b090b3997 (patch)
treece5842611c8a7a5f04568aeb64a26c655951ad7c
parent03770daba44fb9ac5c21729d0b32cda10f8767bd (diff)
downloadNim-8de19a7f4c5387042994e061aa28545b090b3997.tar.gz
fix a parsing regression (do is still mandatory in some situations)
-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])
+