* mitigates #12815 * Update doc/nimc.rst Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com> Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
This commit is contained in:
parent
58e27ebd4a
commit
0c4582c665
4 changed files with 26 additions and 5 deletions
|
|
@ -72,6 +72,7 @@ type
|
||||||
warnFileChanged = "FileChanged",
|
warnFileChanged = "FileChanged",
|
||||||
warnSuspiciousEnumConv = "EnumConv",
|
warnSuspiciousEnumConv = "EnumConv",
|
||||||
warnAnyEnumConv = "AnyEnumConv",
|
warnAnyEnumConv = "AnyEnumConv",
|
||||||
|
warnHoleEnumConv = "HoleEnumConv",
|
||||||
warnCstringConv = "CStringConv",
|
warnCstringConv = "CStringConv",
|
||||||
warnUser = "User",
|
warnUser = "User",
|
||||||
# hints
|
# hints
|
||||||
|
|
@ -158,6 +159,7 @@ const
|
||||||
warnFileChanged: "file changed: $1",
|
warnFileChanged: "file changed: $1",
|
||||||
warnSuspiciousEnumConv: "$1",
|
warnSuspiciousEnumConv: "$1",
|
||||||
warnAnyEnumConv: "$1",
|
warnAnyEnumConv: "$1",
|
||||||
|
warnHoleEnumConv: "$1",
|
||||||
warnCstringConv: "$1",
|
warnCstringConv: "$1",
|
||||||
warnUser: "$1",
|
warnUser: "$1",
|
||||||
hintSuccess: "operation successful: $#",
|
hintSuccess: "operation successful: $#",
|
||||||
|
|
|
||||||
|
|
@ -1173,8 +1173,12 @@ proc track(tracked: PEffects, n: PNode) =
|
||||||
"implicit conversion to 'cstring' from a non-const location: $1; this will become a compile time error in the future" %
|
"implicit conversion to 'cstring' from a non-const location: $1; this will become a compile time error in the future" %
|
||||||
$n[1])
|
$n[1])
|
||||||
|
|
||||||
if n.typ.skipTypes(abstractInst).kind == tyEnum:
|
let t = n.typ.skipTypes(abstractInst)
|
||||||
message(tracked.config, n.info, warnAnyEnumConv, "enum conversion: $1" % $n[1])
|
if t.kind == tyEnum:
|
||||||
|
if tfEnumHasHoles in t.flags:
|
||||||
|
message(tracked.config, n.info, warnHoleEnumConv, "conversion to enum with holes is unsafe: $1" % $n)
|
||||||
|
else:
|
||||||
|
message(tracked.config, n.info, warnAnyEnumConv, "enum conversion: $1" % $n)
|
||||||
|
|
||||||
if n.len == 2:
|
if n.len == 2:
|
||||||
track(tracked, n[1])
|
track(tracked, n[1])
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,8 @@ CStringConv Warn about dangerous implicit conversions
|
||||||
to `cstring`.
|
to `cstring`.
|
||||||
EnumConv Warn about conversions from enum to enum.
|
EnumConv Warn about conversions from enum to enum.
|
||||||
AnyEnumConv Warn about any conversions to an enum type.
|
AnyEnumConv Warn about any conversions to an enum type.
|
||||||
|
HoleEnumConv Warn about conversion to an enum with
|
||||||
|
holes. These conversions are unsafe.
|
||||||
ResultUsed Warn about the usage of the
|
ResultUsed Warn about the usage of the
|
||||||
built-in `result` variable.
|
built-in `result` variable.
|
||||||
User Some user-defined warning.
|
User Some user-defined warning.
|
||||||
|
|
|
||||||
|
|
@ -95,13 +95,26 @@ reject:
|
||||||
{.push warning[AnyEnumConv]:on, warningAsError[AnyEnumConv]:on.}
|
{.push warning[AnyEnumConv]:on, warningAsError[AnyEnumConv]:on.}
|
||||||
|
|
||||||
reject:
|
reject:
|
||||||
# bug #12815
|
|
||||||
type
|
type
|
||||||
Foo = enum
|
Foo = enum
|
||||||
one = 1
|
one
|
||||||
three = 3
|
three
|
||||||
|
|
||||||
var va = 2
|
var va = 2
|
||||||
var vb = va.Foo
|
var vb = va.Foo
|
||||||
|
|
||||||
{.pop.}
|
{.pop.}
|
||||||
|
|
||||||
|
{.push warningAsError[HoleEnumConv]:on.}
|
||||||
|
|
||||||
|
reject:
|
||||||
|
# bug #12815
|
||||||
|
type
|
||||||
|
Hole = enum
|
||||||
|
one = 1
|
||||||
|
three = 3
|
||||||
|
|
||||||
|
var va = 2
|
||||||
|
var vb = va.Hole
|
||||||
|
|
||||||
|
{.pop.}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue