Render bug: if expression with statement list expression as condition (#8375)

* Fixes #8348
This commit is contained in:
cooldome 2018-07-21 13:01:47 +02:00 • committed by Andreas Rumpf
commit ec02940185
3 changed files with 29 additions and 5 deletions

View file

@ -634,9 +634,16 @@ proc gstmts(g: var TSrcGen, n: PNode, c: TContext, doIndent=true) =
optNL(g)
proc gcond(g: var TSrcGen, n: PNode) =
if n.kind == nkStmtListExpr:
put(g, tkParLe, "(")
gsub(g, n)
if n.kind == nkStmtListExpr:
put(g, tkParRi, ")")
proc gif(g: var TSrcGen, n: PNode) =
var c: TContext
gsub(g, n.sons[0].sons[0])
gcond(g, n.sons[0].sons[0])
initContext(c)
putWithSpace(g, tkColon, ":")
if longMode(g, n) or (lsub(g, n.sons[0].sons[1]) + g.lineLen > MaxLineLen):
@ -651,7 +658,7 @@ proc gif(g: var TSrcGen, n: PNode) =
proc gwhile(g: var TSrcGen, n: PNode) =
var c: TContext
putWithSpace(g, tkWhile, "while")
gsub(g, n.sons[0])
gcond(g, n.sons[0])
putWithSpace(g, tkColon, ":")
initContext(c)
if longMode(g, n) or (lsub(g, n.sons[1]) + g.lineLen > MaxLineLen):
@ -715,7 +722,7 @@ proc gcase(g: var TSrcGen, n: PNode) =
var last = if n.sons[length-1].kind == nkElse: -2 else: -1
if longMode(g, n, 0, last): incl(c.flags, rfLongMode)
putWithSpace(g, tkCase, "case")
gsub(g, n.sons[0])
gcond(g, n.sons[0])
gcoms(g)
optNL(g)
gsons(g, n, c, 1, last)
@ -1102,13 +1109,13 @@ proc gsub(g: var TSrcGen, n: PNode, c: TContext) =
put(g, tkAccent, "`")
of nkIfExpr:
putWithSpace(g, tkIf, "if")
if n.len > 0: gsub(g, n.sons[0], 0)
if n.len > 0: gcond(g, n.sons[0].sons[0])
putWithSpace(g, tkColon, ":")
if n.len > 0: gsub(g, n.sons[0], 1)
gsons(g, n, emptyContext, 1)
of nkElifExpr:
putWithSpace(g, tkElif, " elif")
gsub(g, n, 0)
gcond(g, n[0])
putWithSpace(g, tkColon, ":")
gsub(g, n, 1)
of nkElseExpr: