From e7eb01ed4887ffb15a308b3599461ba42f4d7f8a Mon Sep 17 00:00:00 2001 From: Zahary Karadjov Date: Mon, 10 Apr 2017 12:08:36 +0300 Subject: 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. --- compiler/parser.nim | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'compiler/parser.nim') 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 -- cgit 1.4.1-2-gfad0