summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorZahary Karadjov <zahary@gmail.com>2017-04-10 12:08:36 +0300
committerZahary Karadjov <zahary@gmail.com>2017-04-10 12:08:40 +0300
commite7eb01ed4887ffb15a308b3599461ba42f4d7f8a (patch)
tree4e9454364fb63e9de2ddc085cd366681bfea957e /compiler
parent9ffaee3f8803a6fce35bf784c8870ea238747e13 (diff)
downloadNim-e7eb01ed4887ffb15a308b3599461ba42f4d7f8a.tar.gz
fix a parsing regression (calls with do inside param lists)
This treatment is applied only when "do" is used, because
the code foo(x: bar) is recognized as object construction.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/parser.nim7
1 files changed, 5 insertions, 2 deletions
diff --git a/compiler/parser.nim b/compiler/parser.nim
index 110f4a43d..d549e1358 100644
--- a/compiler/parser.nim
+++ b/compiler/parser.nim
@@ -67,6 +67,7 @@ proc parseTry(p: var TParser; isExpr: bool): PNode
 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
 # implementation
 
 proc getTok(p: var TParser) =
@@ -364,7 +365,10 @@ proc colonOrEquals(p: var TParser, a: PNode): PNode =
 proc exprColonEqExpr(p: var TParser): PNode =
   #| exprColonEqExpr = expr (':'|'=' expr)?
   var a = parseExpr(p)
-  result = colonOrEquals(p, a)
+  if p.tok.tokType == tkDo:
+    result = postExprBlocks(p, a)
+  else:
+    result = colonOrEquals(p, a)
 
 proc exprList(p: var TParser, endTok: TTokType, result: PNode) =
   #| exprList = expr ^+ comma
@@ -668,7 +672,6 @@ proc namedParams(p: var TParser, callee: PNode,
   # progress guaranteed
   exprColonEqExprListAux(p, endTok, result)
 
-proc postExprBlocks(p: var TParser, x: PNode): PNode
 proc primarySuffix(p: var TParser, r: PNode, baseIndent: int): PNode =
   #| primarySuffix = '(' (exprColonEqExpr comma?)* ')' doBlocks?
   #|       | doBlocks