This commit is contained in:
Araq
2017-12-27 21:26:37 +01:00
parent e49f18801c
commit 0b0baece89
3 changed files with 25 additions and 2 deletions

View File

@@ -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 =

View File

@@ -732,7 +732,7 @@ proc semRaise(c: PContext, n: PNode): PNode =
var typ = n.sons[0].typ
if typ.kind != tyRef or typ.lastSon.kind != tyObject:
localError(n.info, errExprCannotBeRaised)
# check if the given object inherits from Exception
var base = typ.lastSon
while true:

View File

@@ -140,4 +140,14 @@ echo(
else:
quo do (a: int) -> bool:
a mod 3 != 0
)
)
# bug #6980
proc fooBool: bool {.discardable.} =
true
if true:
fooBool()
else:
raise newException(ValueError, "argh")