de-deprecate silly warning about non-exhaustive string case statments
This commit is contained in:
parent
57b7c45128
commit
e8cfa14354
1 changed files with 3 additions and 7 deletions
|
|
@ -205,13 +205,12 @@ proc semCase(c: PContext, n: PNode): PNode =
|
||||||
var covered: BiggestInt = 0
|
var covered: BiggestInt = 0
|
||||||
var typ = commonTypeBegin
|
var typ = commonTypeBegin
|
||||||
var hasElse = false
|
var hasElse = false
|
||||||
var notOrdinal = false
|
|
||||||
let caseTyp = skipTypes(n.sons[0].typ, abstractVarRange-{tyTypeDesc})
|
let caseTyp = skipTypes(n.sons[0].typ, abstractVarRange-{tyTypeDesc})
|
||||||
case caseTyp.kind
|
case caseTyp.kind
|
||||||
of tyInt..tyInt64, tyChar, tyEnum, tyUInt..tyUInt32, tyBool:
|
of tyInt..tyInt64, tyChar, tyEnum, tyUInt..tyUInt32, tyBool:
|
||||||
chckCovered = true
|
chckCovered = true
|
||||||
of tyFloat..tyFloat128, tyString, tyError:
|
of tyFloat..tyFloat128, tyString, tyError:
|
||||||
notOrdinal = true
|
discard
|
||||||
else:
|
else:
|
||||||
localError(n.info, errSelectorMustBeOfCertainTypes)
|
localError(n.info, errSelectorMustBeOfCertainTypes)
|
||||||
return
|
return
|
||||||
|
|
@ -244,9 +243,6 @@ proc semCase(c: PContext, n: PNode): PNode =
|
||||||
hasElse = true
|
hasElse = true
|
||||||
else:
|
else:
|
||||||
illFormedAst(x)
|
illFormedAst(x)
|
||||||
if notOrdinal and not hasElse:
|
|
||||||
message(n.info, warnDeprecated,
|
|
||||||
"use 'else: discard'; non-ordinal case without 'else'")
|
|
||||||
if chckCovered:
|
if chckCovered:
|
||||||
if covered == toCover(n.sons[0].typ):
|
if covered == toCover(n.sons[0].typ):
|
||||||
hasElse = true
|
hasElse = true
|
||||||
|
|
@ -1631,7 +1627,7 @@ proc semStmtList(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
||||||
elif expr[2].typ.isUnresolvedStatic:
|
elif expr[2].typ.isUnresolvedStatic:
|
||||||
inferConceptStaticParam(c, expr[2], expr[1])
|
inferConceptStaticParam(c, expr[2], expr[1])
|
||||||
continue
|
continue
|
||||||
|
|
||||||
let verdict = semConstExpr(c, n[i])
|
let verdict = semConstExpr(c, n[i])
|
||||||
if verdict.intVal == 0:
|
if verdict.intVal == 0:
|
||||||
localError(result.info, "type class predicate failed")
|
localError(result.info, "type class predicate failed")
|
||||||
|
|
@ -1655,7 +1651,7 @@ proc semStmtList(c: PContext, n: PNode, flags: TExprFlags): PNode =
|
||||||
of nkPragma, nkCommentStmt, nkNilLit, nkEmpty: discard
|
of nkPragma, nkCommentStmt, nkNilLit, nkEmpty: discard
|
||||||
else: localError(n.sons[j].info, errStmtInvalidAfterReturn)
|
else: localError(n.sons[j].info, errStmtInvalidAfterReturn)
|
||||||
else: discard
|
else: discard
|
||||||
|
|
||||||
if result.len == 1 and
|
if result.len == 1 and
|
||||||
c.inTypeClass == 0 and # concept bodies should be preserved as a stmt list
|
c.inTypeClass == 0 and # concept bodies should be preserved as a stmt list
|
||||||
result.sons[0].kind != nkDefer:
|
result.sons[0].kind != nkDefer:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue