diff --git a/compiler/sempass2.nim b/compiler/sempass2.nim index 4ff8ca3126..d9ac57d1a1 100644 --- a/compiler/sempass2.nim +++ b/compiler/sempass2.nim @@ -496,6 +496,33 @@ proc addRaiseEffect(a: PEffects, e, comesFrom: PNode) = if not isDefectException(e.typ): throws(a.exc, e, comesFrom) +proc skipHiddenConv(n: PNode): PNode = + result = n + while true: + case result.kind + of nkHiddenStdConv, nkHiddenSubConv: + result = result[1] + else: break + +proc addRaiseEffectsFromExpr(a: PEffects, e, comesFrom: PNode) = + if e.isNil: + return + case e.kind + of nkStmtList, nkStmtListExpr, nkBlockStmt, nkBlockExpr: + if e.len > 0: + addRaiseEffectsFromExpr(a, e.lastSon.skipHiddenConv, comesFrom) + of nkIfExpr, nkIfStmt: + for branch in items(e): + if branch.len > 0: + addRaiseEffectsFromExpr(a, branch.lastSon.skipHiddenConv, comesFrom) + of nkCaseStmt: + for i in 1.. 0: + addRaiseEffectsFromExpr(a, branch.lastSon.skipHiddenConv, comesFrom) + else: + addRaiseEffect(a, e, comesFrom) + proc addTag(a: PEffects, e, comesFrom: PNode) = var aa = a.tags for i in 0..