assignments support ': stmtList' like let/var do

This commit is contained in:
Andreas Rumpf 2017-04-04 12:20:43 +02:00
commit e21ca54b11
3 changed files with 10 additions and 3 deletions

View file

@ -1208,7 +1208,7 @@ proc parseMacroColon(p: var TParser, x: PNode): PNode =
proc parseExprStmt(p: var TParser): PNode = proc parseExprStmt(p: var TParser): PNode =
#| exprStmt = simpleExpr #| exprStmt = simpleExpr
#| (( '=' optInd expr ) #| (( '=' optInd expr colonBody? )
#| / ( expr ^+ comma #| / ( expr ^+ comma
#| doBlocks #| doBlocks
#| / macroColon #| / macroColon
@ -1219,6 +1219,12 @@ proc parseExprStmt(p: var TParser): PNode =
getTok(p) getTok(p)
optInd(p, result) optInd(p, result)
var b = parseExpr(p) var b = parseExpr(p)
if p.tok.tokType == tkColon and p.tok.indent < 0:
if b.kind != nkEmpty:
let call = makeCall(b)
call.add parseDoBlock(p, parLineInfo(p))
parseDoBlocks(p, call)
b = call
addSon(result, a) addSon(result, a)
addSon(result, b) addSon(result, b)
else: else:

View file

@ -103,7 +103,7 @@ macroColon = ':' stmt? ( IND{=} 'of' exprList ':' stmt
| IND{=} 'except' exprList ':' stmt | IND{=} 'except' exprList ':' stmt
| IND{=} 'else' ':' stmt )* | IND{=} 'else' ':' stmt )*
exprStmt = simpleExpr exprStmt = simpleExpr
(( '=' optInd expr ) (( '=' optInd expr colonBody? )
/ ( expr ^+ comma / ( expr ^+ comma
doBlocks doBlocks
/ macroColon / macroColon

View file

@ -18,7 +18,8 @@ template y(val, body): untyped =
proc mana = proc mana =
let foo = x: let foo = x:
echo "boo" echo "boo"
var foo2 = y 3: var foo2: int
foo2 = y 3:
echo "3" echo "3"
echo foo, " ", foo2 echo foo, " ", foo2