fixes #6980
This commit is contained in:
parent
e49f18801c
commit
0b0baece89
3 changed files with 25 additions and 2 deletions
|
|
@ -780,6 +780,19 @@ proc buildEchoStmt(c: PContext, n: PNode): PNode =
|
|||
|
||||
proc semExprNoType(c: PContext, n: PNode): PNode =
|
||||
result = semExpr(c, n, {efWantStmt})
|
||||
# make an 'if' expression an 'if' statement again for backwards
|
||||
# compatibility (.discardable was a bad idea!); bug #6980
|
||||
var isStmt = false
|
||||
if result.kind == nkIfExpr:
|
||||
isStmt = true
|
||||
for condActionPair in result:
|
||||
let action = condActionPair.lastSon
|
||||
if not implicitlyDiscardable(action) and not
|
||||
endsInNoReturn(action):
|
||||
isStmt = false
|
||||
if isStmt:
|
||||
result.kind = nkIfStmt
|
||||
result.typ = nil
|
||||
discardCheck(c, result)
|
||||
|
||||
proc isTypeExpr(n: PNode): bool =
|
||||
|
|
|
|||
|
|
@ -141,3 +141,13 @@ echo(
|
|||
quo do (a: int) -> bool:
|
||||
a mod 3 != 0
|
||||
)
|
||||
|
||||
# bug #6980
|
||||
|
||||
proc fooBool: bool {.discardable.} =
|
||||
true
|
||||
|
||||
if true:
|
||||
fooBool()
|
||||
else:
|
||||
raise newException(ValueError, "argh")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue